Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,092 views

Published on

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

Published in: Engineering
  • Be the first to comment

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

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

×