CI/CDパイプラインとは、ソフトウェア開発プロセスを自動化するための方法として、多くのアプリ開発中に品質保証の手段として利用されています。本文では、CI/CDパイプラインの基本情報を皆さんに紹介した上、それを簡単に実装できる方法を皆さんに紹介します。
CI/CDパイプラインとは
CI/CDパイプラインとは、ソフトウェア開発プロセスを自動化するための方法論です。CIはContinuous Integration(継続的インテグレーション)、CDはContinuous Delivery/Continuous Deployment(継続的デリバリー/継続的デプロイメント)の略称です。CI/CDパイプラインを実装することで、ソースコードの変更があるたびに、自動的にビルド、テスト、リリースプロセスを実行できます。これにより品質を維持しつつ、開発スピードを上げることができるのでしょう。
継続的インテグレーション(CI)について
継続的インテグレーション(Continuous Integration、CI)とは、ソフトウェア開発において、開発者がコードの変更を頻繁にリポジトリに取り込むプラクティスです。
継続的インテグレーションを実現するために、主に次の流れで行うことができます。
- 開発者は日次、時間単位でコードの変更を共有リポジトリにコミット
- コミットがあるたびに、自動的にビルドとテストが実行
- ビルドやテスト結果は開発者に即座にフィードバック
- インテグレーション上の問題は早期に発見できるため、開発品質が向上
CIを実現するためには、GitやSVNなどのバージョン管理システムと、Jenkins、CircleCIなどのCIツールを使うのが一般的です。CIのメリットは、複数人での開発を効率的に進められること、バグを早期検出できること、リリースサイクルを短縮できることなどがあげられます。アジャイル開発手法と密接に関わるプラクティスです。
継続的デリバリーとデプロイメント(CD)について
継続的インテグレーションを行なった上、継続的デリバリー(Continuous Delivery)と継続的デプロイメント(Continuous Deployment)は、CIのプロセスを拡張したソフトウェア配信の手法です。
継続的デリバリー
- 新しいコード変更がリポジトリにコミットされるたびに、自動的にビルド、テスト、パッケージングを実行
- その結果を手動で本番環境にデプロイする
つまり自動化は本番デプロイまでではなく、人為的な判断を介在させる手法です。
継続的デプロイメント
- 新しい変更があるたびに、自動的にビルド、テスト、本番へのデプロイまで全てを実行
- 人の手を全く介さずに、開発から本番デプロイまで完全自動化する
ということで、継続的デリバリーと継続的デプロイメントの共通目的は、より頻繁にリリースを行い、迅速な市場フィードバックを得ることにあります。自動化の程度によってデリバリーとデプロイメントを使い分けます。
CI/CDパイプラインの仕組み
CI/CDを実現するために、主に次のような仕組みになっています。
- 開発者がソースコードを変更し、リポジトリ(GitHubなど)にコミットする
- コミットをトリガーとして、CIサーバー(Jenkinsなど)が自動的にビルドプロセスを実行
- ビルドに成功したならば、自動的に単体テスト・統合テストを実行
- テストに成功した場合、CD(継続的デリバリー)では成果物をリリース用のアーティファクトとして保管
- CD(継続的デプロイメント)ではさらにアーティファクトを自動的に本番環境にデプロイ
- デプロイ結果は開発者に通知され、必要に応じて監視・ロールバックを実施
- 以上のプロセスを繰り返し、頻繁なインテグレーションとデリバリーを実現
CI/CDパイプライン構築に利用されるツール
CI/CDを実現するためには、自動ビルドツール、テスト自動化、コンテナ技術などの導入が必要になります。代表的なCI/CDツールとして、Jenkins、CircleCI、TravisCIなどがあげられます。次は、CI/CDパイプラインを構築するために利用される主なツールを紹介します。
CIサーバー
- Jenkins - 最も普及しているオープンソースのCIサーバー
- CircleCI - SaaS型のCIサービス
- TravisCI - GitHubとの連携が強いCIサービス
- TeamCity - JetBrains社の商用CIツール
自動ビルド
- Maven - Javaアプリのビルド自動化ツール
- Gradle - Mavenに替わるビルド自動化ツール
- webpack - JavaScriptアプリのビルド・パッケージングツール
テスト自動化
- JUnit - Javaのユニットテストフレームワーク
- Selenium - ブラウザオートメーションテストツール
コンテナ
- Docker - コンテナ仮想化技術
- Kubernetes - コンテナオーケストレーションツール
クラウドプラットフォーム
- AWS - CodePipeline, CodeDeployなどのサービス
- GCP - Cloud Build, Cloud Runなどのサービス
これらのツールを組み合わせることで、エンドトゥエンドのCI/CDパイプラインを実現できます。
ApidogでCI/CDをより簡単に実現
現在、APIは開発者同士のインターフェースとなるため、アプリ開発の基盤にもなっています。アプリを開発するときに、各APIを利用しなければなりません。そこで、APIの仕様などを頻繁的に変更する場合、CI /CDパイプラインを利用すると、サービスの品質を保証することもできますし、サービスのリリースサイクルを非常に短縮することもできます。
ApidogをJenkinsに連携して自動テストを実現
定期的にテストを実行したい場合、ApidogのCI/CD機能を使って、Jenkinsと連携して行うことがお勧めです。
ステップ⒈Apidogを開き、左側メニューから自動テスト→テストシナリオを新規作成の順にクリックして、テストシナリオを手動で配置します。
ステップ⒉上部のメニューからCI /CDをクリックして、「新規」ボタンをクリックすると、Jenkinsでの実行コマンドが表示されます。
このように、ApidogのCI/CD機能を使って、Jenkinsに連携すると、自動テストが簡単に実行されます。
WebhookでAPIに変更がある度に継続的インテグレーションを実現
継続インテグレーションを実現するために、APIの仕様などに変更が生じる度に、自動的にテストを実行する必要があります。特に大規模のプロジェクトは数多くのAPIを保有する場合、どのAPIに何らかの変更があっても、サービス品質を確保するために、自動テストを行う必要があると思います。
Apidogできちんと管理されているAPIに何らかの変更がある場合、Webhook機能を通じてJenkinsに伝えることができますので、一旦APIに変更があると、Jenkins側は変更の通知が受けられ、自動テストを行うことができるようになります。
左側メニューから「共有」→「通知設定」→「サードパーティ連携」の順にWebhookのトリガーイベントを設定してJenkinsに連携できます。