DepOpsとCI/CDの関係 by AWS
DevOps(development operation)
- 無駄なサボトルネックを取り除くことで、ライフイクルを効率化し、高速化する
つまり作業は全て自動化する
1行のコードを変更したとして、通常デプロイにどれくらいの時間がかかる?
再現性
DevOps観点のアンチパターン
承認フローの追加(ダブルチェック、承認MTG)
- 安心するためにダブルチェック・会議をするのではなく、システム化するべき
DevOpsタスク
[Code] -> [Build] -> [Test] -> (Application)
[Deploy] -> (Deploy)
[Provision] -> (EC2) -- (OS) -- (Package)
- Provisionはあらかじめインフラを作っておくこと
- CircleCIでは、[Build][Test][Deploy]
DevOpsの失敗パターン
- 最初からディティールを詰めすぎる(こうあるべき論)
アプリが完成してからCI/CDに載せる
解決策
小さく初めて育てていく
Hello WorldのCI/CDを作ってから拡張
ロールバックが大事
Demo
AYAGASAKI/eb-java-scorekeep
CircleCIとGithub連携
公式の通り
IAM USER 作成
Code Deploy
S3
クレデンシャルは、環境変数としてコンテナに渡す
Cloud9
EC2上にCloud9の環境を用意している
Git Clone
cirlcle/config.yml
- codedeployのみデプロイする設定としている
- S3へpush
appspec.yml
コードデプロイ中は、ロードバランサで制御されている
code commit 連携はできない
[cloud9] -> [git clone] -> [git push] -> [CircleCI build] -> [CircleCI S3 upload] -> [code deploy] -> [EC2]
- git push -> (webhook) -> CircleCI
DepOpsとCI/CDの関係 by CircleCI
CI/CD
CI
- 全てのコミットをトリガーにしてビルドとテストを繰り返すこと
- 早い段階でバグを発見できる
- 設定で制御可能(開発者地震で制御)
- 静的解析
- コードの品質UP
- masterブランチの品質向上
CD
- (狭義)Continuous Delivery(継続的デリバリー)
- Continuous Deployment(継続的デプロイメント)
- (広義)ビジネス価値の継続的デリバリー
大事なこと
- ステップを刻む(成果物の生成、システムテスト、品質保証(第三者検証)、ステージング自動リリース、構成管理、監視対象)
- ステークホルダーを巻き込むこと
DevOpsとしてCDを導入したとき効率的な成果
https://www2.circleci.com/rs/485-ZMH-626/images/5-Key-Metrics-Engineering.pdf - Commit-to-Deploy time コードがコミットされてからデプロイされるまでの時間 - Build Time: CIビルドに掛かる時間 - Queue Time: CIビルドが始まるまでに待たされる時間 - How often Master is Red: Masterブランチが壊れてる時間 - Engineering Overhead: ツールのメンテナンスなど開発以外に掛かっている時間
- おすすめ参考書籍: LeanとDevOpsの科学
- DevOpsの改善をやっている会社と、やっていない会社で差が開いている
CircleCi思想
- configは、ソースコードと同じくレビューとバージョン管理を行うべきである
- 明示的であるべき
ワークフロー
- ジョブを並列で動かす
- スケジューリング: ナイトリービルドのように決まった時刻に実行
- マニュアル承認: 手動承認を挟み込める
- ブランチ指定:
タグ指定:
SSH デバッグ: ビルド終了後2時間、もしくはSSHセッションが終わって10分間までは、コンテナに入れる
ビルド高速化
- 同一ジョブ間のキャッシュ: 同一ジョブで利用される永続データを使い回す
- 同一ワークフロー内のキャッシュ: 同一ワークフロー内の異なるジョブで永続データを使い回す
- テストの並列処理
- 複数コンテナで完全に均等化されたテストを実行する
- 前回のビルド結果から処理時間を参照しているため
Orbs
- CircleCIの設定を再利用する
- Orbs Registry (https://circleci.com/orbs/registry/)
- CircleCI Orbs 開発完全ガイド 2019年度版(有料)
- note
aws-ecr: circleci/aws-ecr@1.0.0
- Orbsを使っていることを検知し、定義をダウンロード&埋め込み、CircleCIが動作する(シェルがパッケージングされている)
CircleCIでCDを実現するために
継続的デプロイに必要なこと(機能面)
- アーティファクト(成果物)が管理されていること(APIで取得できる状態)
- デプロイに必要なトークンの情報が秘匿できること(IAMトークン)
- ダウンタイムを最小にできること
- 切り戻しが容易であること
CircleCIハンズオンセミナーあるよ!