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

この記事が気に入ったらサポートをしてみませんか?