Why not Circle CI • 1.x → 2.xへの過渡期 • 当時ドキュメント等が不足(2017年末時点) • ライセンスコスト • Enterprise版の価格感がプロジェクト予算と見合わなかった 31 (C) Recruit Technologies Co.,Ltd. All rights reserved.
システム全体構成 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
システム全体構成 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)
システム全体構成 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 リスクとして受容)
システム全体構成 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 リスクとして受容) あくまでも目的は ビジネス目標の達成 技術リスク回避がより大きなビジネスリスク (リリースの遅延など)を呼び込んではいけない
コンテナベースのCIパイプラインを導入した効果 ① コンテナベースにしたのでそもそも環境依存でビルドが 失敗することが少なくなった ② 環境依存のテストに関してもイメージリポジトリから pullしてくればよいので、原因調査が容易になった – ex) linuxとmacのpathの解決の問題など ③ 高いDX CIの信頼性は大幅に高まった
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
CIパイプラインの修正結果 65 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト 実行の トリガー medium テスト1 medium テスト2 medium テスト2 medium テスト 結果通知 イメージ のビルド & small テスト イメージ のpush medium 依存モ ジュール build
CIパイプラインの修正結果 66 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト 実行の トリガー medium テスト1 medium テスト2 medium テスト2 medium テスト 結果通知 イメージ のビルド & small テスト イメージ のpush medium 依存モ ジュール build 可能な限り早い段階で欠陥の検出を狙う & 余分なテストを実行させない
ビルド速度に配慮のない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回目
ビルド速度に配慮のない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を利用する
ビルド速度に配慮のない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つでもファイルに変更がある場合 以降のキャッシュは使われない
ビルド速度に配慮のない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] 依存パッケージのインストール等、 変更が極力少ないものを上に持ってくる
CIパイプラインの修正(再掲) 85 (C) Recruit Technologies Co.,Ltd. All rights reserved. テスト 実行の トリガー medium テスト1 medium テスト2 medium テスト2 medium テスト 結果通知 イメージ のビルド & small テスト イメージ のpush medium 依存モ ジュール build
デプロイ手順の統一 (継続的デプロイ) ① 環境問わず同じ手順でデプロイできるように ② 手順を簡略化することで誰でもデプロイできるように 92 (C) Recruit Technologies Co.,Ltd. All rights reserved. 開発環境でデプロイプロセスを磨き込む 自信をもって本番環境にデプロイ
デプロイ手順の統一 (継続的デプロイ) ① 環境問わず同じ手順でデプロイできるように ② 手順を簡略化することで誰でもデプロイできるように 93 (C) Recruit Technologies Co.,Ltd. All rights reserved. 属人性を排除して安定した開発・リリース効率を実現 開発環境でデプロイプロセスを磨き込む 自信をもって本番環境にデプロイ
① プロダクトコードの品質向上への取り組み CIのパイプラインに工学的なコード分析・計測の仕組みを追 加したい 99 (C) Recruit Technologies Co.,Ltd. All rights reserved. 不要テストコード検出 CIおよび環境のコード化を推し進めたからこそトライできる (間違っていてもすぐにCIや環境をロールバックできるためチャレンジの土台ができた)