はじめに
Jenkinsを利用てリポジトリ監視をしたい。しかし、自分が利用しているSCMは社内独自ツールという、
(´・д・`)
なカンジなので、Jenkinsのプラグインがなかった。しかたがないので、こんな方法でなんとかならないか考えた。
- cronを利用して、5分毎にローカルのリポジトリをアップデートする。
- watchrを利用して、ファイルの変更を監視。
- wgetを利用して、Jenkinsのジョブをキックする。
今回利用するもの
- CentOS
- git
- Jenkins
- crontab
- watchr
cronで定期リポジトリ更新
5分毎にローカルで持っているリポジトリを更新する。5分毎の定期実行はJenkinsを利用てもいいけど、これはバックグラウンドで動かしたいので、cronを利用しようと思う。
まずは、crontabに実行したいコマンドを記述する。以下のコマンドでエディタが開きます。
% crontab -e
cronの記述方法は
「分」「時」「日」「月」「曜日」 [実行コマンド]
詳しくは、以下を参照。
「/」を利用すると、間隔を指定できる。たとえば、5分毎にコマンドを実行するには、以下のように書く。
*/5 * * * * git pull
せっかくならば、JenkinsのJobを使ってもよい。その場合は、古いビルドの破棄にチェックを入れて、ビルドの最大保存数を制限する。Jenkinsで5分定期を動かす記法はcronと同じ。
*/5 * * * *
watchrを利用して、ファイルの変更を監視
ファイルに変更があったかどうかを監視するためのrubyスクリプトでwatchrというものがある。これで、ファイルの変更を見つけたらJenkins Jobをキックしてみる。(ちなみに、pythonだとwatchmedo)
[tsu-nera]% gem install watchr
Successfully installed watchr-0.7
Parsing documentation for watchr-0.7
1 gem installed
設定ファイルに監視のルールを書く。設定ファイルの書き方は、Readmeが参考になる。
以下のように、監視したいファイルを正規表現で、監視に引っかかったファイルに対して、実行したいコマンドを書く。
watch( 'test/test_.*\.rb' ) {|md| system("ruby #{md[0]}") }
watch( 'lib/(.*)\.rb' ) {|md| system("ruby test/test_#{md[1]}.rb") }
wathcrコマンドに設定ファイルを渡して実行する。
bash-4.1# watchr git.watchr &
wgetを利用して、Jenkinsのジョブをキック
wgetでURLを指定すると、Jenkinsのジョブを実行することができる。
$ wget --http-user=<ユーザ名> --http-password=<パスワード> https://yourserver.com/job/<ジョブ>/build?token=<トークン名>
以下の過去記事も参照。
今回はコレ。
wget --no-proxy --http-user=tsu-nera --http-password=*********** https://192.168.118.130:8080/job/vxUnit/build?token=vxunit_token
まとめると、watchrに渡す設定ファイルは以下のようになる。
watch( 'src/*.[ch]' ) {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** https://localhost:8080/job/vxUnit/build?token=vxunit_token") }
watch( 'test/*.[ch]' ) {|md| system("wget --no-proxy --http-user=tsu-nera --http-password=********** https://localhost:8080/job/vxUnit/build?token=vxunit_token") }