CICDとは何なのか?
参考動画:CI/CD【サイボウズ開運研修2021】
https://www.youtube.com/watch?v=s597DjqgHyM
CICDを導入する課題感
たくさんのエンジニアで一つのプロダクトを開発するとき、プログラムの結合のタイミングでまとめてたくさんのバグが見つかる。
それぞれ修正作業同士が新たなバグを生み修正作業が終わらない
バグが作られてから発見、解決までのタイムラグが発生する
スケジュールが見積もりづらくなる
上記のような課題を解決するために考えられた開発手法
CICDとはどのようなものか
下のようにCIとCDは言葉上の意味の違いはあるが実際はCICDとして一つのテスト自動化というような意味で使われることが多い
継続的インテグレーション(CI)
細かくアップグレードする
アップグレード毎に自動テストを走らせる
細かくテストするといっても機能全体ができていないのにマージやテストできるのか?すべてのアップグレードに対するテストとはどのようなものか?
継続的デリバリー(CD)
CI+リリースまでに必要な検証を自動化する
部分的に人間の手動作業が入ることを許す
CICDで自動化するテストの例
静的解析
構文チェック
コードスタイルチェック(可読性)
コードパターンチェック(エラーが発生しやすいパターンを防ぐ)
自動テスト
単体テスト:関数など小さな単位
結合テスト
受入テスト
ビジネス要求を満たしているか
非機能要件テスト
性能検証、脆弱性検証
毎回組み込むとテスト長くなりがち必要に応じて
CICDツール
Jenkins
OSS,オンプレ構築可能。
CircleCI
オンプレ版も存在。シンプルかつ導入しやすい
GithubActions
パブリックリポジトリでは完全無料
AWSのCodeシリーズ
CodeBuild, CodeDeploy, CodePipeline
CICDの導入のアンチパターン
ローカルで開発しすぎる:1日1回以上が目安
ビルドの実行頻度が少ない
ビルドが失敗しても放置される、CICDの成功失敗に気付かない
CICDのビルド時間が長すぎる
可能な限り並列実行する
テストピラミッドを意識して必要なテストを行う用に
ビルドが不安定
ビルドの品質が低い
実行環境が毎回異なる
感想
社内にCICDの知見がないなか導入を進めていくとそもそもどんなテストをどのように構築したらいいのかというところがわからない。
導入したものの重要なテストは人の手に残り形骸化したCICDだけが動きつづけ失敗しても気に掛けなくなる。ということが起きそう。
一方で知見さえあれば横展開できることも多そうかつ、全員の業務負荷が軽減するためアイディアが出やすいと思う。
導入する際は既存で使われている事例などとりあえず収集してチームで話し合って価値ある、導入コスト低いものから導入していくということをすることで形骸化した仕組みにしないような工夫をしたい。
Gitopsとは(参考)
バージョン管理や継続的インテグレーション/継続的デリバリー(CI/CD)などのDevOps(開発および運用)の手法をインフラ管理に適用した運用モデル
コードベースでインフラの設計、保守を行う手法みたいなイメージ
コードをGitで管理するからGitops
この記事が気に入ったらサポートをしてみませんか?