経緯
以前Jenkinsとgithub actionsの違いについて調べていたところ、CICDの説明がここのサイトにわかりやすーく書かれていたため、自分の学習も含め、改めてCICDとは何かまとめてみようと思いました。
CICD(継続的インテグレーション/継続的デリバリー&デプロイ)
ソフトウェアのリリーススピード向上を目的としたソフトウェア開発の手法です。頻繁にビルドやテストを実行します。
一般的には、コードがgithubなどにコミットされたタイミングで、ビルドプロセスやリリースプロセスを自動実行するように構成します。
コミットされるたびに実行されるため、エラーがあればすぐコミットした開発者にフィードバックされ、影響範囲の小さいうちにバグの発見と修正が可能となります。
自動でプロセスが実行されるため、人手によるミスや、操作のばらつきが少なくなります。
CI(継続的インテグレーション)
開発者が書いた新しいコード(開発ブランチ)とメインブランチを頻繁に統合するプロセスです。
githubのmergeがそれにあたります。
一回のコミットでの変化量を小さくして頻繁にマージすれば、問題の発見が早くなりますし、対処も楽になります。
これは切るチケットの範囲も適切か問われてきますね。
問題発見の余分な負担を小さくするために、自動化されたテストを行います。
CD(継続的デリバリー)
CIを延長して、単体テストだけでなく、結合テストなども自動的に行い、新しい変更がリリース可能であることを保証するプロセスです。
このプロセスを経た成果物はいつでも本番環境にデプロイすることができます。
CDが行う代表的なものは以下のとおりです。
- リリースノートの作成
- ソフトウェアのパッケージング
- テスト環境へのデプロイ
- 機能要件、非機能要件の充足を確認する包括的なテスト
継続的デプロイメント
CDをさらに延長して、リリース可能であることを保証されたソフトウェアを実際に本番環境にデプロイするプロセスです。
このプロセスでは確実にデプロイが実行されるように配慮された実行環境のリソースを構築、設定、管理し、万が一の時は、アプリケーションの状態を元に戻すことが自動的に行われます。
最後に
結構雰囲気で使っていたCICD、調べてみれば
適切なチケットを切って、gitのコミット、マージからテスト、ビルド、デプロイまでを自動で行おう!楽しよう! というものでした。
適切なチケットを切るのが一番難しいんですけどね笑
この記事がお役に立てれば幸いです!!
参考文献