Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
116
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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

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

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

その他

  • レポートは省略した方が時間の節約になる
  • 他の設定でハッシュを直接指定して手動起動することも出来る
  • (課題)自動コメントは失敗したときだけコメントするようにしたい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
116
Help us understand the problem. What are the problem?