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のタイプはフリースタイルで大丈夫です。

job

バッチスクリプトが入っているレポジトリを登録。

job2

ビルドトリガを定期的に実行にしcronを設定。

jenkins

実行するシェルスクリプトを書く。 今回はperlのスクリプトを実行するだけ。

job3

これでjobを保存すれば5分毎にGithubのレポジトリがJenkinsサーバにチェックアウトされ、スクリプトが実行されます!

まとめ

  • cronの設定作業をUIから行うことができて楽。バッチ毎にjobを分ければ更に楽です。
  • 仮に実行に失敗してもJenkinsのWebUIからjob実行ボタンをポチッと押せば再実行可能。サーバに入って細々したコマンドを打つ必要なし。
  • サーバに入る必要がないということはサーバ管理者でなくてもJenkinsのアクセス権限さえもらっていればバッチの再実行が可能。楽。
  • サーバで動くスクリプトがGithubで管理できる。Jenkinsが勝手にGithubからコピーしてくれるから修正後にサーバに反映させる必要がないです。pull requestがマージされたらその次のjobから自動的に変更が反映されます。
  • また一つ便利になりました。