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.

JenkinsとCodeBuildとCloud Buildと私

4,370 views

Published on

Jenkinsユーザーカンファレンス東京2018のLTで話した内容です

Published in: Engineering
  • Be the first to comment

JenkinsとCodeBuildとCloud Buildと私

  1. 1. JenkinsとCodeBuildとCloud Buildと私 Shoji Shirotori / @irotoris Recruit Lifestyle Co., Ltd.
  2. 2. 自己紹介 白鳥 昇治(シロトリ ショウジ) / @irotoris データエンジニア@リクルートライフスタイル 社内データ分析基盤/データパイプラインの開発を担当(分析もします) Docker ❤ Kubernetes ❤ CD/CI ❤ Serverless ❤ BigData
  3. 3. いまやっているCI/CD AWS / GCP / オンプレで構成されたデータ分析基盤のデプロイ・構成管理 データ加工・集計アプリケーションとそのコンテナのビルド・テスト・デプロイ
  4. 4. CI/CD(AsIs) Database Server Batch Server Github Enterprise Container Registry Container RegistryBatch Server On-Premise CI Notification from Jenkins God (Infra Team) ×Services×ENV etc. etc.
  5. 5. Jenkins運用でやりたくないこと Jenkins Agentのインスタンス・ランタイム・パッケージ管理 CI用の権限強めのアクセスキーの発行・管理 Jenkinsプラグイン管理
  6. 6. Jenkins運用でやりたくないこと Jenkins Agent(ビルドサーバ)のインスタンス・ランタイム・パッケージ管理 僕「opensslのバージョン古くてこのパッケージ動かないんですけど…。」 神「でもバージョン上げるとこっちのパッケージが動かなくなるので…。」 僕「えぇ…」
  7. 7. Jenkins運用でやりたくないこと Jenkins Agent(ビルドサーバ)のインスタンス・ランタイム・パッケージ管理 僕「ジョブの並列度上がってきたからAgent追加しよ」 バージョン固定してないパッケージ「昨日メジャーバージョンアップしたで!!」 Agentたち「「「「はい環境差分」」」」 僕「動かん…なんでや…」
  8. 8. Jenkins運用でやりたくないこと Jenkins Agent(ビルドサーバ)のインスタンス・ランタイム・パッケージ管理 僕「ジョブの並列度上がってきたからAgent追加しよ」 サーバーレス好きな僕「システムはサーバーレスなのにCIでサーバー増やすんか www」 僕「自己矛盾つらい」
  9. 9. Jenkins運用でやりたくないこと CI用の権限強めのアクセスキーの発行・管理 僕「Terraformでクラウドリソースのcreate/delete/modifyするから、CIの権限めちゃ 強いなぁ」 僕「$ git push」 僕「あっ」 →怖いのでJeninsのインスタンスにIAM Roleつけてそのインスタンス上でCI実行 →環境ごとにMaster/Agentが誕生する→管理がさらに面倒になる
  10. 10. Jenkins運用でやりたくないこと Jenkinsプラグイン管理 僕「Blue Ocean入れよう」 Job「NullPointerException」 僕「!?」 リトライポチー Job「SUCCESS」 僕「!?!?」
  11. 11. カンファレンス>Goole Cloud Build!! ブログ>AWS CodeBuild便利!!
  12. 12. カンファレンス>Goole Cloud Build!! ブログ>AWS CodeBuild便利!!
  13. 13. AWS CodeBuild ??? マネージドなコンテナベースのビルド実行環境 - 指定したランタイムのコンテナや自作コンテナを実行 - ビルド成果物はECRやS3へ保存 分単位の従量課金、無料枠あり yamlでコマンドや処理順序を記述していく 選べるインスタンスタイプ、並列実行もOK AWS Codeシリーズと組み合わせてCI/CDパイプラインを作る、そのパーツ Jenkinsプラグイン(https://github.com/awslabs/aws-codebuild-jenkins-plugin)
  14. 14. Google Cloud Build ??? マネージドなコンテナベースのビルド実行環境 - 指定したランタイムのコンテナや自作コンテナを実行 - ビルド成果物はGCRやGCSへ保存 分単位の従量課金、無料枠あり yamlでコマンドや処理順序を記述していく 選べるインスタンスタイプ、並列実行もOK CI/CDパイプラインとしても使える Jenkinsプラグイン(https://github.com/jenkinsci/google-cloudbuild-plugin)
  15. 15. JenkinsとCodeBuildとCloud Buildと私 どこまでCodeBuild / Cloud Buildにまかせるか?? 1. CI / CDパイプライン全部。もうJenkinsいらないやつ。 2. ビルド実行環境のみ。Jenkinsからビルドサービスをキックする。 Cloud Build Build / UT Deploy - Dev Integration Test UI Test Deploy - Prd Build / UT Deploy - Dev Integration Test UI Test Deploy - Prd Cloud Build Cloud Build Cloud Build Cloud Build Cloud Functions
  16. 16. JenkinsとCodeBuildとCloud Buildと私 どこまでCodeBuild / Cloud Buildにまかせるか?? 1. CI / CDパイプライン全部(もうJenkinsいらないやつ) 2. ビルド実行環境のみ。Jenkinsからビルドサービスをキックする。 →現状、オンプレ+マルチクラウド →インフラのビルドやデプロイは同じ場所で統合されたパイプラインにしたい →でもコンテナだけのデプロイは統合しなくても OK →デプロイ単位に応じてどっちも試す ● コンテナのビルド・デプロイとかの単発ジョブで済むやつ →1 ● ビルド・テスト・Devデプロイ・Prdデプロイ、とパイプラインが長いやつ →2
  17. 17. CI/CD(ToBe) Database Server Batch Server Github Enterprise Container Registry Container RegistryBatch Server On-Premise CI Notification from Jenkins God (Infra Team) etc. etc.
  18. 18. JenkinsとCodeBuildとCloud Buildと私 Jenkins Agent(ビルドサーバ)のインスタンス・ランタイム・パッケージ管理 ランタイムのコンテナ化で解決 CodeBuild/Cloud Buildともにメインどころのビルドランタイムは公式で用意(なければ 自作する)   →AWSのほうが種類多くて汎用的(+=Python, Ruby, etc.)   →GoogleはGCPに特化(+=gcloud, gsutil, kubectl) CodeBuild/Cloud Build上で実行できればインスタンス管理・Agentのスケールはなに も考えなくていい。
  19. 19. JenkinsとCodeBuildとCloud Buildと私 CI用の権限強めのアクセスキーの発行・管理 CodeBuild/Cloud Build側でIAM Roleベースで実行する →アクセスキーはいらない
  20. 20. JenkinsとCodeBuildとCloud Buildと私 Jenkinsプラグイン管理
  21. 21. JenkinsとCodeBuildとCloud Buildと私 Jenkinsプラグイン管理 方針:必要最低限の信頼できるプラグインのみ(それってどんなプラグイン?) おじさんA「Jenkins、君はGit pullしてBuildサービスのAPIを叩いて結果を教えてくれれ ばええんやで。プリセットのプラグインのみでいくで。」 おじさんB「CodeBuildもCloud Buildもプラグインから実行するよ。バグってたら自分で 直すよ。便利なプラグインは使っていこう。」 チームメンバのスキルとJenkinsおじさんの思考で決めると良さげ
  22. 22. CI/CD(ToBe) Database Server Batch Server Github Enterprise Container Registry Container RegistryBatch Server On-Premise CI Notification from Jenkins etc. etc. God (Infra Team)
  23. 23. CI/CD(Now) Database Server Batch Server Github Enterprise Container Registry Container RegistryBatch Server On-Premise CI Notification from Jenkins etc. etc. 一部導入 一部導入まだ God (Infra Team)
  24. 24. CodeBuild / Cloud Buildのいいところ yamlでビルドステップが書ける、シンプルな構成 ビルド高速化Tipsがある ● ステップの並列実行が簡単に設定可能 ● Container Registory、S3 or GCSをキャッシュ置き場として使える ビルドマシンのリソースマネジメントがいらない API経由での実行ができる、CIサーバーから切り離されたリソースとして使える  
  25. 25. CodeBuild / Cloud Buildのかゆいところ① Cloud BuildはGithub EnterpriseからWebhookで連携できない ● JenkinsがHubとして大活躍 ○ APIでCloud Buildを実行 ○ JenkinsがGoogle Cloud Source Repository(GCSR)へGit Push、GCSRからCloud Buildをキック CodeBuild / Cloud Buildではビルド/テスト結果の統計レポート機能が乏しい ● Jenkinsがビルド/テスト成果物を表示 ● 結果確認はSlackで頑張る  
  26. 26. CodeBuild / Cloud Buildのかゆいところ② CodeBuild / Cloud BuildはSlack Integration機能がない ● LambdaやCloud Functionで通知機能作ればOK ● CloudWatch Event、Cloud Pub/Subでビルドステータスが取得可能 CodeBuild / Cloud Buildでは複雑なパイプラインは表現しきれない ● 条件による分岐など。結局 Shellで書くことに。 ● そもそも「Build」サービスだし。 パイプラインの可視性に乏しい ● やっぱりJenkinsのBlue Oceanがナンバーワン! 
  27. 27. まとめ AWS CodeBuild / Google Cloud BuildにJenkinsのビルド実行環境を委譲して得られ るもの ● Jenkins Agentのインスタンス・ランタイム・パッケージ管理からの解放 ● CI用の権限強めのアクセスキーの発行・管理がなくなる ● Jenkinsプラグイン管理の最小化 ● (実行環境がスケールするCron)
  28. 28. まとめ AWS CodeBuild / Google Cloud BuildにJenkinsのビルド実行環境を委譲して得られ るもの ● Jenkins Agentのインスタンス・ランタイム・パッケージ管理からの解放 ● CI用の権限強めのアクセスキーの発行・管理がなくなる ● Jenkinsプラグイン管理の最小化 ● (実行環境がスケールするCron) あともう少し…残りの問題は高可用性なJenkins Masterだ!! To Be Continued...

×