GitHub
Jenkins

Jenkinsでプルリクエストをビルドする

More than 3 years have passed since last update.

プラグインに設定オプションが多すぎて、設定の違いにより思い通りに動いたり動かなかったりしたので自分なりにまとめた。

基本的にはまず以下のリンクを参考にしてセットアップしてください。

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



  • 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/*



  • 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 whitelistok to test


    • Admin list, White list, List of organisationsなどを変更した場合は、それだけではそのPull Requestに対して権限を再評価しないような動きなのでadd to whitelistok to testをコメントする必要がある

    • コメントするユーザーはそのジョブでAdmin listに追加されている必要がある



acceptedの確認 -> GhprbPullRequest#checkComment のロジック


設定がうまくいっていない場合

画面上は問題が分かりにくいためログを確認すると良い


  • Author of #1 username on username/repository_name not in whitelist!


    • Github上にコメント Can one of the admins verify this patch? される



  • 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.png

参考

解決方法は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


その他


  • レポートは省略した方が時間の節約になる

  • 他の設定でハッシュを直接指定して手動起動することも出来る

  • (課題)自動コメントは失敗したときだけコメントするようにしたい