Slide 1

Slide 1 text

JapanContainerDays v1812資料 改めて見直すコンテナベース で作るメリット 〜安心して開発を回す技術的ポイント〜 1 (C) Recruit Technologies Co.,Ltd. All rights reserved. 株式会社リクルートテクノロジーズ 藤原 涼馬・伊藤 瑛・宮地 克弥

Slide 2

Slide 2 text

会社紹介: リクルート 2 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 3

Slide 3 text

事業内容の紹介 3 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 4

Slide 4 text

所属組織の紹介:リクルートテクノロジーズ 4 (C) Recruit Technologies Co.,Ltd. All rights reserved. リクルートグループのビジネス・サービス リクルートテクノロジーズ IT・マーケティング ソリューション ビジネス視点の ITマネジメント 横断的にソリューションを提供 上記は対象企業・サービスの一部抜粋です。

Slide 5

Slide 5 text

注意 5 (C) Recruit Technologies Co.,Ltd. All rights reserved. 本発表内容は特定プロジェクトにおける 成果と今後取り組みたい事柄について プロジェクトのメンバーが技術的観点から 整理したものであり、 所属組織としての全体方針を 表すものではありません

Slide 6

Slide 6 text

自己紹介 (藤原 涼馬) 藤原 涼馬 株式会社リクルートテクノロジーズ ITエンジニアリング本部サービスオペレーションエンジニアリング部 プロジェクト基盤G 経歴 2011-2015 ユーザ系SIer にてR&D 2016/1〜 リクルートテクノロジーズに入社 主な活動(社外含む) • コンテナ・クラウド等の先進アーキテクチャの事業への装着 • Rancher JPコアメンバー • 各種勉強会登壇 (Rancher JP meetup, Docker meetup tokyo) • 寄稿(@IT 先行事例に学ぶKubernetes 企業活用の現実) 6 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 7

Slide 7 text

自己紹介(伊藤 瑛) 伊藤 瑛 株式会社リクルートテクノロジーズ ITエンジニアリング本部プロダクトエンジニアリング部 アプリケーションソリューションG 経歴 2015年 入社 主な活動 • フロントエンド・サーバサイドの先進テクノロジ装着 • アプリケーションアーキテクティング 7 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 8

Slide 8 text

自己紹介(宮地 克弥) 宮地 克弥 株式会社リクルートテクノロジーズ ITエンジニアリング本部サービスオペレーションエンジニアリング部 プロジェクト基盤G 経歴 2017年 入社 主な活動 • クラウド等先進アーキテクチャの事業への装着 • 社内ISUCON, 勉強会運営コアメンバー 8 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 9

Slide 9 text

本日のアジェンダ 事例となるサービス インフラアーキテクト視点 アプリケーションエンジニア視点 インフラ・運用エンジニア視点 9 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 10

Slide 10 text

事例となるサービスの説明(ジョブオプLite) 10 (C) Recruit Technologies Co.,Ltd. All rights reserved. 無償の応募管理 & 採用ホームページ作成サービス

Slide 11

Slide 11 text

11 (C) Recruit Technologies Co.,Ltd. All rights reserved. インフラアーキテクト観点

Slide 12

Slide 12 text

前提 12 (C) Recruit Technologies Co.,Ltd. All rights reserved. コンテナベースで作る (一般的なコンテナ活用のメリット等については、 先行事例に学ぶKubernetes企業活用の現実*を参照) * http://www.atmarkit.co.jp/ait/series/9283/

Slide 13

Slide 13 text

新規技術に取り組む際の留意事項 いきなり全部盛りは事故のもと 13 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 14

Slide 14 text

CLOUD NATIVE TRAIL MAP 14 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 15

Slide 15 text

CLOUD NATIVE TRAIL MAP 15 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 16

Slide 16 text

CLOUD NATIVE TRAIL MAP 16 (C) Recruit Technologies Co.,Ltd. All rights reserved. マイルストーンを定める 1. コンテナ化 2. 継続的インテグレーション/デプロイ・デリバリ 3. オーケストレーション& アプリケーション定義 4. 観測性 & 分析

Slide 17

Slide 17 text

CLOUD NATIVE TRAIL MAP 17 (C) Recruit Technologies Co.,Ltd. All rights reserved. 判断ポイント ①既存の技術スタック(どこまで経験・知見があるか) ②メンバーの数と習熟度 ③開発期間

Slide 18

Slide 18 text

① 既存の技術スタック 18 (C) Recruit Technologies Co.,Ltd. All rights reserved. Dockerは経験あり CIはJenkinsなら… Swarm, Cattleは経験あり Datadogの利用実績あり

Slide 19

Slide 19 text

インフラアーキテクト視点 インフラ面の要件 1. 短時間で必要な構成・計算リソースの確保 2. ロックインをできる限り回避 3. “中期的視点”での運用コストの削減 19 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 20

Slide 20 text

インフラアーキテクト視点 インフラ面の要件 1. 短時間で必要な構成・計算リソースの確保 20 (C) Recruit Technologies Co.,Ltd. All rights reserved. インフラの提供が アプリケーション開発の 足かせにならないようにする

Slide 21

Slide 21 text

インフラアーキテクト視点 インフラ面の要件 2. ロックインをできる限り回避 21 (C) Recruit Technologies Co.,Ltd. All rights reserved. なにかあってもアプリケーションを 他の環境で動かせるようにする

Slide 22

Slide 22 text

インフラアーキテクト視点 インフラ面の要件 3. “中期的視点”での運用コストの削減 22 (C) Recruit Technologies Co.,Ltd. All rights reserved. サービスの発展に 本質的ではないものに 手間はかけない

Slide 23

Slide 23 text

1. 短時間で必要な構成・計算リソースの確保 23 (C) Recruit Technologies Co.,Ltd. All rights reserved. オンプレミス パブリック クラウド or

Slide 24

Slide 24 text

1. 短時間で必要な構成・計算リソースの確保 24 (C) Recruit Technologies Co.,Ltd. All rights reserved. オンプレミス パブリック クラウド or

Slide 25

Slide 25 text

2. ロックインをできる限り回避 25 (C) Recruit Technologies Co.,Ltd. All rights reserved. or

Slide 26

Slide 26 text

2. ロックインをできる限り回避 26 (C) Recruit Technologies Co.,Ltd. All rights reserved. or • Kubernetesを活用してロックインを回避 • 他のクラウド環境でも知見が可能な限り活かせるように • デファクトスタンダード • AWS 東京リージョンにEKSがなかったのでk8s on EC2

Slide 27

Slide 27 text

3. 中期視点でのコスト削減 27 (C) Recruit Technologies Co.,Ltd. All rights reserved. Concourse 監視・モニタリング CI/CD

Slide 28

Slide 28 text

3. 中期視点でのコスト削減(監視・モニタリング) 28 (C) Recruit Technologies Co.,Ltd. All rights reserved. Prometheus 選定ポイント • 既存サービスの利用実績 • 監視・モニタリング基盤の運用コスト

Slide 29

Slide 29 text

3. 中期視点でのコスト削減(CI/CD) 29 (C) Recruit Technologies Co.,Ltd. All rights reserved. Concourse

Slide 30

Slide 30 text

3. 中期視点でのコスト削減(CI/CD) 30 (C) Recruit Technologies Co.,Ltd. All rights reserved. Concourse

Slide 31

Slide 31 text

Why not Circle CI • 1.x → 2.xへの過渡期 • 当時ドキュメント等が不足(2017年末時点) • ライセンスコスト • Enterprise版の価格感がプロジェクト予算と見合わなかった 31 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 32

Slide 32 text

Why not Jenkins • Jenkinsのバージョンアップの辛さからの解放 • アドオンを追加した結果バージョンアップできなくなる課題感が あった • コンテナネイティブなCI/CDパイプライン • コンテナ環境を前提としたCI/CDパイプラインが欲しかった 32 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 33

Slide 33 text

Why Concourse? • コンテナベースを前提としたアーキテクチャ • 多様な機能 • 既存時点で公式、コミュニティ含めて多様な機能が提供されている • 各機能の実装もシンプルなため機能の追加も可能 • アドホックな入力の排除 • どの環境でも同じ手順でのCI/CDを強制 • リリース時の事故を排除(人間に都度判断させない仕組み) 33 (C) Recruit Technologies Co.,Ltd. All rights reserved. Concourse

Slide 34

Slide 34 text

システム全体構成 34 (C) Recruit Technologies Co.,Ltd. All rights reserved. AWS Cloud AWS Region ap-northeast-1 VPC AZ ap-northeast-1a AZ ap-northeast-1c AZ ap-northeast-1d Public subnet Public subnet Public subnet Private subnet Private subnet Private subnet Kubernetes cluster Internet NAT gateway NAT gateway NAT gateway AWS Region us-east-1

Slide 35

Slide 35 text

システム全体構成 35 (C) Recruit Technologies Co.,Ltd. All rights reserved. AWS Cloud AWS Region ap-northeast-1 VPC AZ ap-northeast-1a AZ ap-northeast-1c AZ ap-northeast-1d Public subnet Public subnet Public subnet Private subnet Private subnet Private subnet Kubernetes cluster Internet NAT gateway NAT gateway NAT gateway AWS Region us-east-1 SQS SNS SES S3 RDS (Aurora for Postgres) Elasticache (Redis)

Slide 36

Slide 36 text

システム全体構成 36 (C) Recruit Technologies Co.,Ltd. All rights reserved. AWS Cloud AWS Region ap-northeast-1 VPC AZ ap-northeast-1a AZ ap-northeast-1c AZ ap-northeast-1d Public subnet Public subnet Public subnet Private subnet Private subnet Private subnet Kubernetes cluster Internet NAT gateway NAT gateway NAT gateway AWS Region us-east-1 SQS SNS SES S3 RDS (Aurora for Postgres) Elasticache (Redis) コンテナが得意でないもの(e.g. 永続化) や 実装の手間を省いてくれるもの はマネージドサービスを積極利用 (一部のロックインについては代替手段を検討・準備 or リスクとして受容)

Slide 37

Slide 37 text

システム全体構成 37 (C) Recruit Technologies Co.,Ltd. All rights reserved. AWS Cloud AWS Region ap-northeast-1 VPC AZ ap-northeast-1a AZ ap-northeast-1c AZ ap-northeast-1d Public subnet Public subnet Public subnet Private subnet Private subnet Private subnet Kubernetes cluster Internet NAT gateway NAT gateway NAT gateway AWS Region us-east-1 SQS SNS SES S3 RDS (Aurora for Postgres) Elasticache (Redis) コンテナが得意でないもの(e.g. 永続化) や 実装の手間を省いてくれるもの はマネージドサービスを積極利用 (一部のロックインについては代替手段を検討・準備 or リスクとして受容) あくまでも目的は ビジネス目標の達成 技術リスク回避がより大きなビジネスリスク (リリースの遅延など)を呼び込んではいけない

Slide 38

Slide 38 text

インフラアーキテクト視点のまとめ • いきなり全部盛りはNG • 組織内のアセットなどをベースにマイルストーンを定める • 要件を満たしつつ適切な落としどころを見つける • 技術リスクを絶対視しない 38 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 39

Slide 39 text

インフラアーキテクト視点のまとめ • いきなり全部盛りはNG • 組織内のアセットなどをベースにマイルストーンを定める • 組織の成熟度に応じて最適な技術スタックは異なる • 要件を満たしつつ適切な落としどころを見つける • 技術リスクを絶対視しない • 特定のリスクの回避がより大きなリスクを呼び込まないかを判断 39 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 40

Slide 40 text

40 (C) Recruit Technologies Co.,Ltd. All rights reserved. アプリケーション エンジニア視点

Slide 41

Slide 41 text

CI(Continuous Integration/継続的インテグレーション)の役割 • 高頻度のテスト実行 • ソースコードがチェックインされるたびに自動化されたテスト、 各種静的解析、ビルドのプロセスを回す。 • 欠陥の早期検出 • 上記のプロセスでエラーが引き起こされた場合、誰がそのコード をチェックインしたのかを即時に把握し、問題の解決を図ること ができる。 41 (C) Recruit Technologies Co.,Ltd. All rights reserved. https://aws.amazon.com/jp/devops/continuous-integration/ http://se.rdy.jp/req_imp.html 修 正 コ ス ト ( 工 数 ・ お 金 ) 欠陥混入からの経過時間

Slide 42

Slide 42 text

割れ窓理論 • 「長期間修理されることのない割れた窓が1枚でもある と、ビルの住人に投げやりな感覚--ビルのことなど気に もかけない感覚が植え付けられていくのです。そして次 の窓が割れるのです。…」(達人プログラマーより) • 「割れた窓」(悪い設計・質の悪いコード)をそのまま にしてはいけない。 42 (C) Recruit Technologies Co.,Ltd. All rights reserved. https://ja.wikipedia.org/wiki/%E5%89%B2%E3% 82%8C%E7%AA%93%E7%90%86%E8%AB%96

Slide 43

Slide 43 text

CI x 割れ窓理論 • ソースコードがpushされた瞬間に行われる各種のビルド プロセスで、「最初に窓が割れる瞬間」を検出すること ができる 43 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト実行 のトリガー イメージ のビルド テスト1 テスト2 テスト3 テスト結果 通知 NG 変更のリポジトリ へのpush CIパイプライン

Slide 44

Slide 44 text

CI x 割れ窓理論 • ソースコードがpushされた瞬間に行われる各種のビルド プロセスで、「最初に窓が割れる瞬間」を検出すること ができる 44 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト実行 のトリガー イメージ のビルド テスト1 テスト2 テスト3 テスト結果 通知 NG 変更のリポジトリ へのpush CIパイプライン 継続的インテグレーション プロダクトコードを健全に保つにはなくてはならない仕組み (ソースコードレビューなどは行っている前提で)

Slide 45

Slide 45 text

CIに求めること • 信頼性(=意図した通りにビルド・テストが実行されること) • 環境依存で失敗するようなビルド/テストがない (特にローカルでは成功するけどCIでは失敗するようなテスト) • 短時間で実行できること • 一つのビルドに時間がかかりすぎると、FBが即座に受けられない 45 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 46

Slide 46 text

CIに求めること • 信頼性(=意図した通りにビルド・テストが実行されること) • 環境依存で失敗するようなビルド/テストがない (特にローカルでは成功するけどCIでは失敗するようなテスト) • 短時間で実行できること • 一つのビルドに時間がかかりすぎると、FBが即座に受けられない 46 (C) Recruit Technologies Co.,Ltd. All rights reserved. 上記の2つが欠けると、CIを信じないような状況が生まれる

Slide 47

Slide 47 text

CIの信頼性を下げる主な要因 環境差分 47 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 48

Slide 48 text

CIの信頼性を下げる主な要因 環境差分 48 (C) Recruit Technologies Co.,Ltd. All rights reserved. • ローカル環境 - CI環境の差分

Slide 49

Slide 49 text

環境差分で失敗するようなビルド • 環境差分の原因になりやすいもの • モジュールの初期化順に依存 • 並列数に依存 • 外界(I/O・NW通信等)に依存している • ローカルのキャッシュに依存 • 共用環境で一緒に走っているタスクに影響される • このようなビルドは環境の再現・調査が難しい • Developers Experience (= DX) の悪化要因 49 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 50

Slide 50 text

CIの信頼性が失われるとおこること • よくある例 • 「このテストはローカルでは通過するが、 CIだと落ちてしまう。」 • この状況が長く続くと、CIの実行結果を誰も信じなくなる • CIにおける割れ窓の検出が難しくなる 50 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 51

Slide 51 text

CIの信頼性が失われるとおこること • よくある例 • 「このテストはローカルでは通過するが、 CIだと落ちてしまう。」 • この状況が長く続くと、CIの実行結果を誰も信じなくなる • CIにおける割れ窓の検出が難しくなる 51 (C) Recruit Technologies Co.,Ltd. All rights reserved. プロジェクトのソースコードの健全性が損なわれる

Slide 52

Slide 52 text

コンテナ技術とCIの親和性 • ビルド毎に隔離された環境を構築できる • 外界に影響されにくい環境を作る • 環境差分を極小化する • 必要に応じてCI時と同じ構成の環境を逆にローカル環境 に構築することができ、調査が容易にできるようになる • DX*が圧倒的に良い 52 (C) Recruit Technologies Co.,Ltd. All rights reserved. *DX(Developmer eXperiense)… 開発者の開発プロセスにおける体感

Slide 53

Slide 53 text

コンテナ技術とCIの親和性 • ビルド毎に隔離された環境を構築できる • 外界に影響されにくい環境を作る • 環境差分を極小化する • 必要に応じてCI時と同じ構成の環境を逆にローカル環境 に構築することができ、調査が容易にできるようになる • DX*が圧倒的に良い 53 (C) Recruit Technologies Co.,Ltd. All rights reserved. *DX(Developmer eXperiense)… 開発者の開発プロセスにおける体感 コンテナベースで作られたCIの機運

Slide 54

Slide 54 text

コンテナベースのCIの構築 • すべてのビルド・テストをコンテナ上で実行 • ビルド・テストに必要な依存middlewareなどもコンテナでその ビルド専用に立ち上げる • 各種ビルド時に使ったコンテナ都度レジストリにPushし て状態を保持 • PRごとにビルド・テスト実行

Slide 55

Slide 55 text

CIパイプラインの模式図 Pull Requestの作成 テスト実行 のトリガー イメージ のビルド イメージ のプッシュ Lintと テスト テスト結果 通知

Slide 56

Slide 56 text

コンテナベースのCIパイプラインを導入した効果 ① コンテナベースにしたのでそもそも環境依存でビルドが 失敗することが少なくなった ② 環境依存のテストに関してもイメージリポジトリから pullしてくればよいので、原因調査が容易になった – ex) linuxとmacのpathの解決の問題など ③ 高いDX CIの信頼性は大幅に高まった

Slide 57

Slide 57 text

ビルド実行時間の問題 • テストの実行のたびにdocker build & push & pullが複 数走るので、時間がかかりすぎる • パイプラインの並列度が上がるたびに実行時間は悪化 • 2時間程度かかることも

Slide 58

Slide 58 text

CIに求めること(再掲) • 信頼性(=意図した通りにビルド・テストが実行されること) • 環境依存で失敗するようなビルド/テストがない (特にローカルでは成功するけどCIでは失敗するようなテスト) • 短時間で実行できること • 一つのビルドに時間がかかりすぎると、FBが即座に受けられない 58 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 59

Slide 59 text

CIの健全化への取り組み(2つの対処) CIの改善に向けて2つの方針を定めた ① 失敗させるべきテストを早期に失敗させる – 無駄なテストを実行しないようにする ② CIパイプラインの実行速度改善 – パイプライン自体が高速で動作するようにする

Slide 60

Slide 60 text

CIの健全化への取り組み(2つの対処) CIの改善に向けて2つの方針を定めた ① 失敗させるべきテストを早期に失敗させる – 無駄なテストを実行しないようにする ② CIパイプラインの実行速度改善(あとで宮地が説明) – パイプライン時代が高速で動作するようにする

Slide 61

Slide 61 text

CIでテストが失敗する原因 • Lintや単純ミスが多い • 環境に依存しない問題 • 環境起因で落ちるテストは本当に稀 • コンテナで調査したいのはこちら

Slide 62

Slide 62 text

ビルドをできるだけ早く失敗させる • Lintや外界に依存のないテストはdocker buildで失敗さ せ、後続の処理の実行を不要にする(push / pull / テスト依存モジュー ルのビルドなど) • Test Sizesの概念を導入

Slide 63

Slide 63 text

Test Sizes Google Testing Blogより Feature Small Medium Large Network access No localhost only Yes Database No Yes Yes File system access No Yes Yes Use external systems No Discouraged Yes Multiple threads No Yes Yes Sleep statements No Yes Yes System properties No Yes Yes Time limit (seconds) 60 300 900+ https://testing.googleblog.com/2010/12/test-sizes.html

Slide 64

Slide 64 text

Test Sizesの考え方を導入 • Small (外界に依存なし) → Medium / Large (依存あり)の 順に実行するように • テストの起動をSmall / Mediumで分けられるようにする • ex) Goの場合、MediumのテストはTestM_で始まるなどのprefixをつけ る • テストが失敗する要因の大多数を占める単純ミスはSmallで見つけ ることができるものが多い • docker buildと同じタイミングでsmall testを回してしま う

Slide 65

Slide 65 text

CIパイプラインの修正結果 65 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト 実行の トリガー medium テスト1 medium テスト2 medium テスト2 medium テスト 結果通知 イメージ のビルド & small テスト イメージ のpush medium 依存モ ジュール build

Slide 66

Slide 66 text

CIパイプラインの修正結果 66 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト 実行の トリガー medium テスト1 medium テスト2 medium テスト2 medium テスト 結果通知 イメージ のビルド & small テスト イメージ のpush medium 依存モ ジュール build 可能な限り早い段階で欠陥の検出を狙う & 余分なテストを実行させない

Slide 67

Slide 67 text

アプリケーションエンジニア視点のまとめ ① CIが実際の開発に果たす役割とコンテナ環境と の親和性 ② Test Sizesの導入と、段階的なテスト実行によ るパイプラインの最適化 ③ 高いDXの実現

Slide 68

Slide 68 text

アプリケーションエンジニア視点のまとめ ① CIが実際の開発に果たす役割とコンテナ環境と の親和性 ② Test Sizesの導入と、段階的なテスト実行によ るパイプラインの最適化 ③ 高いDXの実現 CIのさらなる改善・DXの改善に向けての取り組み については宮地が解説

Slide 69

Slide 69 text

69 (C) Recruit Technologies Co.,Ltd. All rights reserved. インフラエンジニア視点

Slide 70

Slide 70 text

アジェンダ(インフラエンジニア視点) • CI改善への取り組み • 更に安心して開発を回すために 70 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 71

Slide 71 text

71 (C) Recruit Technologies Co.,Ltd. All rights reserved. CI改善への取り組み

Slide 72

Slide 72 text

CI/CDアーキテクチャ概要

Slide 73

Slide 73 text

CI/CD・ワンボタンでのデプロイ環境を実現したが… 機能面ではモダンな環境 非機能面で課題があった 73 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 74

Slide 74 text

CI/CDアーキテクチャ概要 ここが律速プロセス

Slide 75

Slide 75 text

非機能面の課題 CIサイクルの長さ • 1回のPRのテスト完了までに2時間以上かかる ケースが発生 75 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 76

Slide 76 text

CIサイクルの長期化の悪影響 • 開発効率の低下 • 大量のPRが処理されることなく滞留 • masterブランチが壊れる • (急ぎの場合などに)CIの実行完了を待たずしてマージ 76 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 77

Slide 77 text

CIサイクルの長期化の悪影響 • 開発効率の低下 • 大量のPRが処理されることなく滞留 • masterブランチが壊れる • (急ぎの場合などに)CIの実行完了を待たずしてマージ 77 (C) Recruit Technologies Co.,Ltd. All rights reserved. 抜本的な対策が必要なため 改善活動を実施

Slide 78

Slide 78 text

CIパイプラインの模式図(再掲) Pull Requestの作成 テスト実行 のトリガー イメージ のビルド イメージ のプッシュ Lintと テスト テスト結果 通知

Slide 79

Slide 79 text

CIパイプラインの模式図(再掲) Pull Requestの作成 テスト実行 のトリガー イメージ のビルド イメージ のプッシュ Lintと テスト テスト結果 通知 ビルド速度に配慮のないDockerfile (モノレポ*構成・レイヤーキャッシュへの配慮の不足) 毎回全てのテストを実行 開発の速度が想定よりも早い (常時複数のPRを処理・単純なスペック不足) *システムを構成する全てのコードを単一のリポジトリで管理すること

Slide 80

Slide 80 text

ビルド速度に配慮のないDockerfile 80 (C) Recruit Technologies Co.,Ltd. All rights reserved. FROM のーど:alpine RUN apk add curl COPY . ./ RUN npm i CMD [“npm”,”start] 1回目 FROM のーど:alpine RUN apk add curl COPY . ./ RUN npm i CMD [“npm”,”start] 2回目

Slide 81

Slide 81 text

ビルド速度に配慮のないDockerfile 81 (C) Recruit Technologies Co.,Ltd. All rights reserved. FROM のーど:alpine RUN apk add curl COPY . ./ RUN npm i CMD [“npm”,”start] 1回目 FROM のーど:alpine RUN apk add curl COPY . ./ RUN npm i CMD [“npm”,”start] 2回目 1回目と変わらないのでcacheを利用する

Slide 82

Slide 82 text

ビルド速度に配慮のないDockerfile 82 (C) Recruit Technologies Co.,Ltd. All rights reserved. FROM のーど:alpine RUN apk add curl COPY . ./ RUN npm i CMD [“npm”,”start] 1回目 FROM のーど:alpine RUN apk add curl COPY . ./ RUN npm i CMD [“npm”,”start] 2回目 1つでもファイルに変更がある場合 以降のキャッシュは使われない

Slide 83

Slide 83 text

ビルド速度に配慮のないDockerfile 83 (C) Recruit Technologies Co.,Ltd. All rights reserved. FROM のーど:alpine RUN apk add curl COPY package* ./ RUN npm i COPY . ./ CMD [“npm”,”start] 依存パッケージのインストール等、 変更が極力少ないものを上に持ってくる

Slide 84

Slide 84 text

ビルド速度に配慮のないDockerfile • CI上でcacheを利用するために • なるべくbuildしたいPRに近いImageをcacheとして使う • Multi stage buildを行っている場合は中間レイヤーもちゃんと 持ってくる • さらなる高速化に向けて • BuildContextを最小限に絞る • BuildKit • 各レイヤーの軽量化 84 (C) Recruit Technologies Co.,Ltd. All rights reserved. Pipelineにも修正を加える より詳しいDocker Buildの高速化は https://speakerdeck.com/orisano/docker-build-battle

Slide 85

Slide 85 text

CIパイプラインの修正(再掲) 85 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト 実行の トリガー medium テスト1 medium テスト2 medium テスト2 medium テスト 結果通知 イメージ のビルド & small テスト イメージ のpush medium 依存モ ジュール build

Slide 86

Slide 86 text

CI/CD環境の計算資源の最適化・増強 86 (C) Recruit Technologies Co.,Ltd. All rights reserved. 質的改善: ビルドに適したファイルシステムの選択 Dockerのストレージドライバは用途によって推奨されいてるものが 変わるので適切なものを選択 垂直増強: IO・CPU性能が高いインスタンスの活用 Buildやtest実行はCPU,IOバウンドになりやすいので i3系instanceを採用 水平増強: CIワーカーの数をふやす コアタイム等PRが頻繁に発生する時間ではワーカー自体を増やす

Slide 87

Slide 87 text

87 (C) Recruit Technologies Co.,Ltd. All rights reserved. 1回のPRテスト時間 2時間以上 -> 10分程度に

Slide 88

Slide 88 text

88 (C) Recruit Technologies Co.,Ltd. All rights reserved. 更に安心して開発を回すために -安全・確実なリリース-

Slide 89

Slide 89 text

2つの要点 ① アプリ - インフラ間のコミュニケーション ② 継続的デプロイ 89 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 90

Slide 90 text

コンテナ外との接続(アプリ-インフラ間のコミュニケーション) コミュニケーションのインタフェースを明確化する コンテナと外部サービスの接続情報*は、環境変数などを用 いて後から差し込める形にコミュニケーションをとる 90 (C) Recruit Technologies Co.,Ltd. All rights reserved. 環境変数の設定をインタフェースとして 詳細を詰めることで、手戻りを削減しつつ変更への アジリティを確保する(PRごとの環境やCI上テストが行いやすく) • 接続先ホスト名 • 各種機密パスワード • 外部接続先情報 • など 環境変数で注入

Slide 91

Slide 91 text

デプロイ手順の統一 (継続的デプロイ) ① 環境問わず同じ手順でデプロイできるように ② 手順を簡略化することで誰でもデプロイできるように 91 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 92

Slide 92 text

デプロイ手順の統一 (継続的デプロイ) ① 環境問わず同じ手順でデプロイできるように ② 手順を簡略化することで誰でもデプロイできるように 92 (C) Recruit Technologies Co.,Ltd. All rights reserved. 開発環境でデプロイプロセスを磨き込む 自信をもって本番環境にデプロイ

Slide 93

Slide 93 text

デプロイ手順の統一 (継続的デプロイ) ① 環境問わず同じ手順でデプロイできるように ② 手順を簡略化することで誰でもデプロイできるように 93 (C) Recruit Technologies Co.,Ltd. All rights reserved. 属人性を排除して安定した開発・リリース効率を実現 開発環境でデプロイプロセスを磨き込む 自信をもって本番環境にデプロイ

Slide 94

Slide 94 text

インフラエンジニア観点のまとめ • サービス開発で最初に運用するのはCI/CDサーバ • CI/CDサーバの安定かつ効率的な動作がモダンな開発ではプロダ クト品質のカギになる • コンテナだからこそ気にする部分もある • CIサーバの各種メトリクスの取得も行い、常に計測を怠らないよ うに • コンテナの各種特性を把握することで、安心して快適な 開発環境を! 94 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 95

Slide 95 text

95 (C) Recruit Technologies Co.,Ltd. All rights reserved. まとめ・これから・残課題

Slide 96

Slide 96 text

ここまでとこれから ここまでは2つに絞った話 96 (C) Recruit Technologies Co.,Ltd. All rights reserved. コンテナの利点を生かして ①プロダクトコードの品質向上 ②アプリ-インフラ間のコミュニケーション をいかに向上するかという話

Slide 97

Slide 97 text

ここまでとこれから ここまでは2つに絞った話 97 (C) Recruit Technologies Co.,Ltd. All rights reserved. コンテナの利点を生かして ①プロダクトコードの品質向上 ②アプリ-インフラ間のコミュニケーション をいかに向上するかという話 さらに推し進める スコープを拡大

Slide 98

Slide 98 text

① プロダクトコードの品質向上への取り組み CIのパイプラインに工学的なコード分析・計測の仕組みを追 加したい 98 (C) Recruit Technologies Co.,Ltd. All rights reserved. 不要テストコード検出

Slide 99

Slide 99 text

① プロダクトコードの品質向上への取り組み CIのパイプラインに工学的なコード分析・計測の仕組みを追 加したい 99 (C) Recruit Technologies Co.,Ltd. All rights reserved. 不要テストコード検出 CIおよび環境のコード化を推し進めたからこそトライできる (間違っていてもすぐにCIや環境をロールバックできるためチャレンジの土台ができた)

Slide 100

Slide 100 text

② アプリ-インフラ間のコミュニケーション スコープ拡大への取り組み コミュニケーションのスコープを拡大する 100 (C) Recruit Technologies Co.,Ltd. All rights reserved. 現在 エンジニア間 コミュニケーション これから エンジニア ー非エンジニア間 コミュニケーション

Slide 101

Slide 101 text

② アプリ-インフラ間のコミュニケーション スコープ拡大への取り組み アジリティを生かしてプロダクト内のプロジェクト・チーム・個人に 本番と同等の動作環境をオンデマンド&超ハイアジリティで提供 101 (C) Recruit Technologies Co.,Ltd. All rights reserved. 経営層と デザイナーと プロデューサーと 大量プロジェクトの並行推進に対応 実際にデプロイされ、 動く成果物をベースに議論

Slide 102

Slide 102 text

残された課題 システムはスケールするがこの仕組みを 作る人の数がスケールしづらい問題… 102 (C) Recruit Technologies Co.,Ltd. All rights reserved. 経営層と デザイナーと プロデューサーと 大量プロジェクトの並行推進に対応 実際にデプロイされ、 動く成果物をベースに議論

Slide 103

Slide 103 text

残された課題 システムはスケールするがこの仕組みを 作る人の数がスケールしづらい問題… 103 (C) Recruit Technologies Co.,Ltd. All rights reserved. 経営層と デザイナーと プロデューサーと 大量プロジェクトの並行推進に対応 実際にデプロイされ、 動く成果物をベースに議論 このあたり、議論していただけるかたいらっしゃれば Ask the speakerブースまで是非!

Slide 104

Slide 104 text

全体まとめ • コンテナベースで高品質なCI/CDを実現した • 高いDXを実現 • エンジニアリング効率の向上 • プロダクト品質の改善 • ただし、継続的かつ地道なCI改善はずっと必要 • アプリ-インフラ間のコミュニケーションインタフェースの 統一 • アプリ-インフラ間のコミュニケーション効率の改善 • 手戻りの減少・アジリティの向上 • サービス開発品質・アジリティの向上を継続して推進 • (CI改善) 工学的な手法を導入しての品質改善 • (コミュニケーション改善)非エンジニアとのコミュニケーション改善 104 (C) Recruit Technologies Co.,Ltd. All rights reserved.

Slide 105

Slide 105 text

105 (C) Recruit Technologies Co.,Ltd. All rights reserved. ご清聴ありがとうございました! 時間の都合上、説明しきれなかったことは Ask the speakerブースまたは、 後日公開する予定の資料のAppendixにおいて補足予定です