Multibranch Pipelineで
いろいろ学んだこと
リクルートライフスタイル
R-SET 関根 康史
自己紹介
● 関根 康史 ( @AHA_oretama )
● リクルートライフスタイル
○ 2015/8 〜
● ブッキングテーブル開発統括 → R-SET活動中
SET = Software Engineer in Test
R-SET = Recruit Lifestyle’s SET
Multibranch Pipeline
● Jenkins 2系で推奨インストール入り
● 変更があったブランチやプルリクエストを自動でビルドする
Webhook設定を忘れがち
● 変更があったら自動でビルドする、と言ったが、
その契機はGitHubのWebHook
● GitHub Setting -> Webhooks で設定
URL:http://<Name of Jenkins server>:8080/github-webhook/
● 残念ながらMultiBranchジョブを作成したら
自動では設定されるわけではない。手動で設定する必要がある
GitHub設定を理解する
(下2つのfork版も存在)
Build origin branches ?
Build origin branches also filed as PRs ?
Build origin PRs (merged with base
branch)
?
Build origin PRs (unmerged head) ?
GitHub設定を理解する
(下2つのfork版も存在)
Build origin branches ブランチに変更があった場合にビルドする
Build origin branches also filed as PRs PRされているブランチに対してビルドする
Build origin PRs (merged with base
branch)
マージ先とマージしてからPRをビルドする。
マージ先に変更があってもビルドする。
Conflictするとコケる。
(PRにコメントする場合に利用)
Build origin PRs (unmerged head) PRをビルドする。
(PRにコメントする場合に利用)
Build origin PRsのJenkinsfileの扱いについて
Build origin PRs (merged with base
branch)
プルリクエスト先にJenkinsfileがある場合に
ビルドされる
Build origin PRs (unmerged head) プルリクエスト元にJenkinsfileがある場合に
ビルドされる
ブランチの設定箇所
GUI? or Pipeline?
#!groovy
pipeline {
...
when {
branch 'develop'
}
}
ブランチの設定箇所
GUI? or Pipeline? ⇒ 条件によって使い分け+併用が望ましい
GUI Pipeline
ブランチの正規表現が豊富。
include/excludeのみ
変更容易性が高いが、
ジョブが増えて可視性が低い。
複合条件も可能。
ジョブの対象が
変わらない場合はGUIがベター
ex.
develop -> 更新があればビルド
ジョブの対象が頻繁に
変わる場合にはPipelineがベター
ex.
feature/AAA -> BBB環境へリリース
Multibranch Pipeline ver.1.4まで
Jenkinsfileは1つのみ、固定パス (./Jenkinsfile)
● when文を多用して、1ファイルに処理をいくつも書く。
→ 処理の複雑化
● プルリクエストに対するコメント処理を同時に複数実行(Parallelの使用)
→ stash/unstashでソースファイルを受け渡し
→ .gitファイルがないため、gitが必要な処理が動かない…
Jenkinsfileでパス指定可能に
JENKINS-34561の対応により、ver.1.5よりパスを指定可能
→ ジョブを複数作ることで、ジョブごとにJenkinsfileを分けれる
パス指定での複数ジョブの弊害
● プルリクエストで行う処理をジョブ(Jenkinsfile)を分けることで並列化
○ テスト
○ SonarQube
○ Lint
○ …
● しかし、GitHubへのステータスはすべてのジョブで共有
最後のものでステータスは上書きされる ⇒ やはりParallelが必要
1. SonarQube失敗 -> GitHub異常
2. テスト成功 -> GitHub正常
⇒ 最終GitHubステータス = 正常
MultibranchどころかPipeline知らない問題
● どうすればいいか模索中
構想中
JOB

Multibranch pipelineでいろいろ学んだこと