プラグインに設定オプションが多すぎて、設定の違いにより思い通りに動いたり動かなかったりしたので自分なりにまとめた。
基本的にはまず以下のリンクを参考にしてセットアップしてください。
JenkinsプラグインのGitHub pull request builder pluginを使ってみる
-> ビルドの結果のキャプチャあり(参考にしたソース、内容はほぼ同じ)
Jenkins wiki - GitHub pull request builder plugin
GitHub - ghprb-plugin
説明通りセットアップしたものの、自分のところではうまく動作しなかった部分を以降にまとめました。
GitHubの設定
個人とか少数で使う場合は必ずしも必要ない
-> Jenkinsプラグインのジョブの設定でAdmin listに設定すれば良い
Jenkinsプラグインのジョブの設定でList of organisationsを使う場合
- Pushできる権限のチームにJenkinsで使うユーザーを追加
- 自動コメントさせたければbotユーザーを作っても良い
- 別のAdmin権限のチームの人も同じチームに追加しないといけない
例えばPushもAdminも権限がある違うチームがある場合、その中のメンバーもJenkins用ユーザーのチームに追加する必要がある
Github Team permissioins
Jenkinsプラグインの管理
- GitHub Pull Request Builder (>= 1.9)
- Git Pluginは2.0はまだ不安定かもしれないので、1.Xの方が良い
システムレベルの設定
Jenkinsの管理 > システムの設定
Jenkinsの位置 - Jenkins URL
- Pull Request上のリンクに使われる
- ローカルなら
http://127.0.0.1:8080/
など
GitHub pull requests builder
- Access Token
- GitHubのページで作成 [https://github.com/settings/applications] > Personal Access Tokens
- または 高度な設定 -> Username/Password を入力して Create access token
- Admin list (任意)
- GithubのUsername
- ジョブ作成時のデフォルト値としてコピーされる
- Crontab line (任意)
-
H/5 * * * *
推奨。ジョブ作成時のデフォルト値としてコピーされる
-
- Published Jenkins URL (任意)
- ローカルなら
http://127.0.0.1:8080/
など - この値が設定されると、ビルド後Test PASSed/FAILed. などのコメントをするようになる
- ローカルなら
各ジョブの設定
一つのジョブで通常のbranchとPull Requestを同時に扱えないみたいなので別ジョブを作る必要がある
GitHub project (プロジェクト名の少し下)
- URLを設定
https://github.com/username/repository_name
ソースコード管理 Git
- Repository URL
git@github.com:username/repository_name.git
- 高度な設定
- Refspec
+refs/pull/*:refs/remotes/origin/pr/*
- Refspec
- Branch Specifier
${sha1}
ビルド・トリガ
- GitHub pull requests builder をチェック
- Admin listかWhite listかList of organisationsの権限の設定が必要
- Admin list - GitHubのユーザー名
- List of organisations - GitHubのチーム名
- Crontab line - ポーリングスケジュールを設定
ビルド
- シェルの実行(例)
bundle install
rake test
ビルドの実行
- デフォルトはcronでポーリングする
- 設定でgithub hookも可能
- Pull Request上のコメントで起動
Pull Request上にコメントして起動
-
test this please
- 設定などが間違っていて起動しない時や、強制的に再度ビルドしたい時
-
add to whitelist
やok to test
- Admin list, White list, List of organisationsなどを変更した場合は、それだけではそのPull Requestに対して権限を再評価しないような動きなので
add to whitelist
やok to test
をコメントする必要がある - コメントするユーザーはそのジョブでAdmin listに追加されている必要がある
- Admin list, White list, List of organisationsなどを変更した場合は、それだけではそのPull Requestに対して権限を再評価しないような動きなので
acceptedの確認 -> GhprbPullRequest#checkComment のロジック
設定がうまくいっていない場合
画面上は問題が分かりにくいためログを確認すると良い
- Author of #1 username on username/repository_name not in whitelist!
- Github上にコメント
Can one of the admins verify this patch?
される
- Github上にコメント
- GitHub project not set up, cannot start trigger for job GhprbTest
- GitHub project のURLが設定されていない
問題を調べる方法として、各ジョブ、ビルドの状態はJENKINS_HOMEの以下のファイルに記録されている
$ cat org.jenkinsci.plugins.ghprb.GhprbTrigger.xml
推奨プラグイン
-
Template Project Plugin
- 他のジョブのビルドやレポート設定を再利用できる
- ビルド > Use builders from another project
同時に使うと問題のあるプラグイン
-
JobConfigHistory
- 設定の変更履歴を保持し、変更点のdiffが見れるプラグイン
- 問題はhistoryのファイルが空き容量を食いつぶす
- 例えば5分間隔のポーリング、10ほどのjobで1ヶ月動かすと約10GBといったようにゴミのログファイルがたまる
- 既知の問題らしい GhprbTrigger saves its descriptor every time it runs
対象のログが保存される場所は
$JENKINS_HOME/config-history/org.jenkinsci.plugins.phprb.GhprbTrigger/
解決方法はJobConfigHistoryの設定変更
JobConfigHistoryの設定変更
システム設定 > システム設定/ジョブ設定の変更履歴
- 除外するシステム設定ファイルのパターンに
|org.jenkinsci.plugins.ghprb.ghprbTrigger
を追加 - 一応、
重複する変更履歴を保存しない
(Do not save duplicate history)もチェック
解決方法はJobConfigHistoryを使うのを止めるか、定期的なログの削除をするか、JobConfigHistoryの設定でなんとかするのが考えられる
定期的なログの削除
# 容量の確認
du -sh .jenkins/config-history/org.jenkinsci.plugins.phprb.GhprbTrigger/
# 14日以前の古いものを削除する
# crontabに設定してもよい
find .jenkins/config-history/org.jenkinsci.plugins.phprb.GhprbTrigger/ -ctime +14 -maxdepth 1 -print0 | xargs -0 rm -rf
.jenkins
は$JENKINS_HOME
その他
- レポートは省略した方が時間の節約になる
- 他の設定でハッシュを直接指定して手動起動することも出来る
- (課題)自動コメントは失敗したときだけコメントするようにしたい