定期実行って、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/scriptsssh 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) 佐藤 聖規 和田 貴久 河村 雅人 米沢 弘樹 山岸 啓 技術評論社 2011-11-11 売り上げランキング : 14599 Amazonで詳しく見る |