Jenkinsで定期実行するJobを管理したほうが良い3つの理由 | Pimp my Code. @wataru420

Pimp my Code. @wataru420

My name is Wataru Fukunaga.

Pimp my Code. @wataru420-Katherine Jenkins


定期実行って、Cronを使ってやるのが一般的ですよね。
エンタープライズシステムだとJP1とか使って管理したりしますが、
それJenkinsで良くない?

というわけで考えて見ました。

なんでJenkinsがいいのか。

メリット(cronとの比較)

① SVNなどのSCMとの連携が可能

② メール等のアラートが可能

③ 実行履歴の確認が容易

デメリット

① Jenkinsが落ちたら動かない

ただこれはJenkinsの監視やバックアップである程度回避できます。

またJP1 などは大変高価なので、無償で使えるのは嬉しいですね!

実際にやってみた

まずはSVNに適当なプロジェクトを作って適当なShellスクリプトをコミットしてみます。
SVNはファイル単位でのチェックアウトができないのでGitで管理したほうがいいのかもしれません。
Shellスクリプトは終了コードを明示的に0と書いたほうが良いでしょう。
Jenkinsは終了コードが0以外の時にエラーと判断します。

scriptsってディレクトリの中にmkdir.shというスクリプトを作ってみました。

#!/bin/bash

mkdir log || { echo oops!; exit 1; }

echo created directory.

exit 0

メールの設定

Jenkinsの管理メニューからメールに関する設定をします。

smtpサーバと送信元メールアドレスあたりを設定すれば大丈夫です。

Jobの設定

さっき作ったスクリプトを定期実行するJobを作ってみます。
新規でフリースタイルプロジェクトを作成します。

SVNの設定

先程コミットしたプロジェクトを指定します。

これにより、Job実行時に差分がある場合にチェックアウトされるようになります。

ビルドトリガーの設定

定期実行にチェックを入れてcron形式で指定します。

*/5 * * * *

ビルドの設定

ビルド手順の追加で「シェルの実行」を選びます。
ここでrsyncとsshによるリモートのスクリプト実行

rsync -av --exclude="*.svn" $WORKSPACE/scripts/ targethost:/path/to/scripts
ssh targethost sh /path/to/scripts/mkdir.sh

ビルド後の処理の設定

メールの設定だけしておきます。

これで設定完了です。
5分毎にJobが動くようになります。
mkdir.shはすでにディレクトリがあると失敗するので、2回目の実行時に失敗します。
失敗時にメールが飛んでくるはずです。

一旦ディレクトリを削除してしばらく待ってると、今度は復旧したよってメールが飛んできます。
また時系列で失敗したJobの確認もできるし、その時のコンソール出力なんかを確認できます。

これはありがたいですねー

使えるプラグイン

プラグインを入れると更に見やすくなったりします。

Cron Columnプラグイン Cronの設定時間を表示
https://wiki.jenkins-ci.org/display/JENKINS/Cron+Column+Plugin
Next Executionsプラグイン 次の実行時間をサイドバーに表示
https://wiki.jenkins-ci.org/display/JENKINS/Next+Executions
あと、メールの通知をカスタマイズしたい時はEmail-ext plugin
https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin

まとめ

Jenkinsは管理の単位をJobと名付けているだけあって、こういったスクリプトの管理にはとても相性がいいですね。また、バッチサーバがクラッシュした際の復旧も簡単にできるし、素晴らしいなと思いました。

写真はキャサリン・ジェンキンスさんでした。どうでもいい

Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)Jenkins実践入門 ~ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
佐藤 聖規 和田 貴久 河村 雅人 米沢 弘樹 山岸 啓

技術評論社 2011-11-11
売り上げランキング : 14599

Amazonで詳しく見る