Jenkinsをすごいcronとして使う
Jenkinsは継続的デリバリーとか継続的インテグレーションの文脈で語られることが多いので、ソースコードのビルドだったりテストの実行だったりをエンジニアの代わりに実行してくれるツールだと思われていることが多いです。(当たり前のことを長々と何言ってんだって感じですが)
しかしJenkinsの機能を、そういったような開発管理ツールではなく汎用的なバッチツール、要は「すごいcron」として使用できることも分かったのでちょっと試してみました。
Git pluginを入れる
今回はサーバ上で動かすバッチをすべてGithubで管理しようと思いますので、pluginを入れます。 入れるのはjenkins GIT plugin! https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin
いれたらJenkinsからGithubにアクセスする設定を行います。 Jenkinsユーザのホームディレクトリは/var/lib/jenkins以下で次の作業を実行!
cd /var/lib/jenkins sudo -u jenkins mkdir .ssh sudo -u jenkins -H ssh-keygen -t rsa -C jenkins@hiroraba.com chmod 744 ../.ssh
できた公開鍵をGithubに登録したらJenkinsからアクセスできるか確認。
sudo -u jenkins ssh -T git@github.com
コードを書いてjenkinsでバッチを動かす
バッチスクリプトを書いてgithubのレポジトリに登録します。 今回は簡単なHELLOだけprintするスクリプトを書きました。何か画像を収集するスクリプトなどをかければ良かったのですが。
後はJenkinsにjobを登録します。
jobのタイプはフリースタイルで大丈夫です。
バッチスクリプトが入っているレポジトリを登録。
ビルドトリガを定期的に実行にしcronを設定。
実行するシェルスクリプトを書く。 今回はperlのスクリプトを実行するだけ。
これでjobを保存すれば5分毎にGithubのレポジトリがJenkinsサーバにチェックアウトされ、スクリプトが実行されます!
まとめ
- cronの設定作業をUIから行うことができて楽。バッチ毎にjobを分ければ更に楽です。
- 仮に実行に失敗してもJenkinsのWebUIからjob実行ボタンをポチッと押せば再実行可能。サーバに入って細々したコマンドを打つ必要なし。
- サーバに入る必要がないということはサーバ管理者でなくてもJenkinsのアクセス権限さえもらっていればバッチの再実行が可能。楽。
- サーバで動くスクリプトがGithubで管理できる。Jenkinsが勝手にGithubからコピーしてくれるから修正後にサーバに反映させる必要がないです。pull requestがマージされたらその次のjobから自動的に変更が反映されます。
- また一つ便利になりました。