Role Strategy Pluginを有効にしつつコミットフックをビルドトリガにする

Jenkinsはデフォルトではユーザ権限の管理が行えませんが、Role Strategy Pluginを使うと、かなり細かく権限の設定を行うことが出来ます。
素晴らしいですね。

参考:Hudsonの操作権限をユーザ/グループ/ロール別に制御する


で、これを有効にするとVCSのフックスクリプトによるビルドトリガもログインしないと動かないことになります。('A`)
(これまではapacheをプロキシにしてdigest認証を掛けつつcurlでログインしてました(これはこれでメンドイ))

手順

そこで、Project roleのパターンに、コミットトリガを受けるだけのジョブのみマッチするようにして、ReadとBuild権限を割り当て、このRoleを持つユーザを追加します。
これでビルドトリガのジョブの実行だけができる権限を持つRoleとユーザが出来ました。(Role-Based Strategyを使用する場合)


あとは以下のようなスクリプトでビルドが実行できました。(curlでクッキーとか初めて使ったよ)

# hooks/post-receive
user=''
pass=''
token=''
server=''
job=''
temp=`mktemp`
trap "rm -rf $temp" EXIT

## Role Strategy Pluginによる認証を行いクッキーを保存
curl -x '' -c $temp.txt -d 'j_username=${user}' -d 'j_password=${pass}' \
  http:///${server}/jenkins/login

## クッキーを使って、かつ元々必要なユーザ認証用のトークンを渡してビルドを実行
curl -x '' -L -b $temp.txt \
  http://${user}:${token}@${server}/jenkins/job/${job}/build?delay=0

公式wikiではユーザ名は必要無さそうなんですが、手元では指定しないと動きませんでした。(二番目のcurl実行部分)

tokenには、トップページから[Manage Jenkins]>[Manage Users]>[(任意の)User Id]>[configure]>[API Token]で表示される値を指定します。

passにはRole Strategy Pluginで設定したパスワードを指定します。


以上で、最小限(かどうか知らんけど)の権限を持ったビルドトリガスクリプトが出来ました(^^)b