gitでリボジトリへコミットすると、それをJenkinsが検出して、ビルドを実行する仕組みを入れてみた。

通知にするべきかポーリングにするべきか、それが問題だ。

調べてみると、gitのCommitからJenkinsにビルドさせる方法は2つあるっぽい。

  • git commit時にJenkinsに通知する方法
  • Jenkinsがgitリボジトリを定期的にポーリングする方法

通知だと、gitのフック機能を利用して、簡単に実現できる。

ポーリングだと、Jenkins GIT Pluginを使って実現できる。

通知方法だと、branchごとにビルドを起動できないという弱点がある。

今回は、post-commitの方法を利用する。(というより、ポーリングは挫折した)

環境

  • Windows 7 64bit
  • Cygwin

wgetでJenkinsのジョブをキックする

Jenkinsトークンを利用して、リモートからビルドキック

コマンドラインからJenkinのジョブを起動するには、wgetコマンドを使う。

リモートから、jenkinsにアクセスするためには、管理画面からトークンの設定をしておく。

  • 設定 => ビルドトリガ => リモートからビルド
  • 認証トークンで任意のトークン名を記述

これで、JENKINS_URL/job/vxUnit/build?token=TOKEN_NAMEというURLでリモートからキックすることができるようになる。Jobの実行をアカウントを持つユーザのみにしている場合は、-http-user/-http-passworオプションをつける。まとめると、

wget --http-user=<ユーザ名> --http-password=<パスワード> https://yourserver.com/job/<ジョブ>/build?token=<token名> 

git post-commmitの設定

.git/hooks/配下にあるpost-comitファイルに以下の行を追加。 https://localhost:8080の部分は、自分の環境に読み替えてください。

wget --no-proxy https://localhost:8080/job/(ジョブの名前)/build?delay=5sec

post-commitがなければ、新規作成して、実行権限を与える。

touch post-commit
chmod a+x post-commit

post-commit例

#!/bin/sh    
echo "Hook post-commit start"
wget --no-proxy <a href="https://localhost:8080/job/4th_ginnan/build?delay=5sec">https://localhost:8080/job/4th_ginnan/build?delay=5sec</a> || echo "wget failed"
echo "Hook post-commit end"

あとは、git commitを実行すれば、Jenkinsに通知が飛んで、Jobが実行された。

参考:

コマンドラインからJenkinsのジョブを実行する - azuki note