継続的インテグレーションとは?
アプリのコードを追加、修正する(コミットする)ごとに自動的にシステムのビルド、ユニットテストして確実に動作するコードを自動で保持する仕組みで「ソフトウェア品質向上」や「納期短縮」を目的として考え出された開発手法です。短いサイクルで継続的に行う事で、長期に渡って開発とリリースを繰り返すプロジェクトではこの仕組みがこの上ない安全装置としての役割を果たします。
開発環境で実施されることが多く、コードの静的解析ツール、バージョン管理ツールやビルドツール、テストツール、CIツール等の様々なツールと連携して自動化を図ります。
CIで得られる効果
- 継続的に「出荷できる状態」にできる。
- 新しく追加されたコードが問題既存のバグを引き起こしていても、早期に検知できる。
- 問題に早期に対処することで継続的に出荷可能な状態を保つことができる。
- 動作環境も含め、継続的インテグレーションできるため、自動テストやアジャイル型開発の基盤の一つとなる。
CIを採用している開発手法
「エクストリームプログラミング(XP)」が該当します。エクストリームプログラミングの代表的な手法が「スクラム開発」になります。スクラム開発については下記の記事でもまとめています。
CIでよく利用されているツール
Jekins
一番有名で古くからある。オンプレ。プラグイン拡張で多くのシステムと連携できる。マネージドサービスじゃないので自前で保守が必要になってしまう。
Travis CI
SaaS、設定はYAMLで定義。
Circle CI
SaaS、設定はYAMLで定義。
GitHub Actions
SaaS、GitHub上に定義。
Code Pipeline(AWS)
ソース取得、ビルド、デプロイが自動化できる。
Azure Pipeline(Azure)
Azure Devopsサービスの一機能。
ソース取得、ビルド、デプロイが自動化できる。
Cloud Build(Azure)
ソース取得、ビルド、デプロイが自動化できる。
GitLab CI/CD Jobs
CIの流れ
- リポジトリからソースコードの取得
- ビルド
- 「単体テストコードの実行」や「コーディング規約チェック」、「ステップ数カウンタ」
- テストサーバへの配置
- リグレッションテスト
エラーが発生した場合
定期的にCIの一連のプロセスを実行して、エラーが発生した際はメンバーにメールで送信するように設定します。何度もメールがくると煩わしいので各アプリケーションの担当チームだけに限定してメールを送信する設定にすると良いでしょう。
ビルド
ビルド終了後に他のプログラムのビルドを待ち合わせて単体テストを行う事も可能ですが、単体テストは個々のプログラムの動作確認さえできれば良いので、他のプログラムの終了までは待ち合わせなくても良いでしょう。
ステップ数カウンタ
CIの中にステップ数カウンタを用意して、テストコードのテストケース数と照合するというようなことも行う場合もあります。テストケースの妥当性評価ではアプリケーションのステップ数が一般的に妥当と見られているためです。
単体テスト
単体テスト終了後は、リグレッションテストを行うために他のプログラムの単体テスト結果と待ち合わせを行うよう設定すると良いでしょう。
継続的デリバリー(継続的デプロイ)とは?
CIで作成して成果物のステージングや本番環境へのデプロイを自動化する仕組みです。
従来の開発との違い
従来は「テストチーム」、「ビルドチーム」、「リリースチーム」などに分かれて開発を行う手法が一般的だったが、人手を介さないことが可能になるため、効率的な開発が可能。
この記事へのコメントはありません。