オリジナル: Monitoring external jobs Jenkinsは、cron、procmail、inetdデーモンによるプロセスのような非対話型なプロセスの実行を、監視することができます。これらのタスクをまったく監視しないこともあります(その結果、失敗の検出がより難しくなっています)し、成功、失敗にかかわらず常にメールを送信する(そうすると、すぐにメールを無視するようになります)こともあります。Jenkinsを使用すれば、少しの手間で大量のタスクの監視を実行できます。 プロジェクトの設定新しいジョブを作成して、"外部ジョブの監視"を選択します。 実行監視一度プロジェクトを準備すれば、次のようなコマンドを起動すると実行を監視できます。 $ export HUDSON_HOME=http://user:pw@myserver.acme.org/path/to/jenkins/ $ java -jar /path/to/WEB-INF/lib/jenkins-core-*.jar "job name" <program arg1 arg2...> Windowsの場合はこちらです。 > set HUDSON_HOME=http://user:pw@myserver.acme.org/path/to/jenkins/ > java -jar \path\to\WEB-INF\lib\jenkins-core-*.jar "job name" cmd.exe /c <program arg1 arg2...> もしご利用のWebサーバが、Jenkinsのデプロイのために jenkins-core-*.jar remoting-*.jar ant-1.7.0.jar commons-lang-2.4.jar xstream-*.jar 上記のファイルは、warファイルの中の、
プログラムの標準出力や標準エラーもログに記録し、0以外の終了コードであれば、そのジョブを失敗とみなします。 cronの監視cronを監視するには、上記をcronスクリプトから起動するだけです。cronデーモンからのメールを受信しないように次のように記述してもいいかもしれません。 JENKINS_HOME=http://myserver.acme.org/path/to/jenkins/ 0 * * * * export JENKINS_HOME=$HUDSON_HOME; java -jar jenkins-core.jar "backup" backup.sh 2>&1 > /dev/null cron自身をフリースタイル・プロジェクトのビルドを使用してJenkins上に移すこともできます。そうすれば、スケジュールされた起動以外でもジョブを手動で実行することもできます。 プログラムからの外部ジョブの送信
フォーマットは以下の通りです。 <run> <log encoding='hexBinary'>...コンソール出力を16進数のバイナリエンコードしたもの...</log> <result>... エラーコード(整数)0は成功でそれ以外は失敗</result> <duration>... 実行時間(ms) ...</duration> <displayName>... ビルドナンバーの代わりとして表示させたい名前 ...</displayName> <description>... ビルドの詳細 ...</description> </run>
上記のXMLを 下記に、curlを使ったシンプルな例を示します。(この例では、実際のデータは利用せず、コンソールからの出力である $ curl -X POST -d '<run><log encoding="hexBinary">4142430A</log><result>0</result><duration>2000</duration></run>' \ http://user:pass@myhost/jenkins/job/_jobName_/postBuildResult クロスサイト・リクエスト・フォージ(CSRF)対策 / CSRF ProtectionJenkins 1.384 までは、セキュリティオプションの "Prevent Cross Site Request Forgery exploits" を使ってJenkinsを利用している場合、上記のような (java -jar や curl/wget によるPOST) リクエストは、"有効なcrumbがありません/ No valid crumb was included" といった403エラーでリジェクトされてしまいます。 (CSRFについては、こちら: https://www.owasp.org/index.php/Cross-Site_Request_Forgery) 1.385以降のバージョンでは、上記のような java -jar コマンドは、 CSRF対策を有効にしている場合でも利用できます。curl/wgetの場合は、 wget -q --output-document - \ 'http://server/jenkins/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' |