継続的インテグレーションツール

Max Rehkopf Max Rehkopf

継続的インテグレーション (CI) を使用すれば、複数の開発者が共通のコードベースで迅速に貢献およびコラボレーションできます。この方法は、リスクの高いソフトウェア開発を迅速に行う必要があるチームに必須です。継続的インテグレーションがなければ、開発者のコラボレーションは、コードの更新とマージを調整する退屈な手動プロセスになります。

継続的インテグレーションの柱

CI は、自動テスト、バージョン管理、ビルドの自動化、自動デプロイを含むその他のソフトウェア開発のベストプラクティスを基盤に構築されます。これらの継続的インテグレーションの各柱には、独自のツールと哲学のエコシステムがあります。ソフトウェア開発ツールのプロバイダーは、これらの柱を 1 つの包括的パッケージにバンドルした完全なサービスとしての CI 製品を提供し始めています。バンドル製品をより深く理解するため、基礎を確認しましょう。

ソース管理/バージョン管理

継続的インテグレーションのおそらく最も重要な基礎的柱であるソース管理/バージョン管理は、同じコードベースで作業している複数の開発者間での編集の競合を伝達および解決するために使用されます。ソース管理/バージョン管理はさまざまなツールで構成されます。その中で最も有名なのは Git と Subversion です。サービスとしての CI 製品の中心はバージョン管理システムです。

自動テスト

最も重要なソフトウェアプロジェクトには、ビジネス製品や機能には明示的に使用されない追加のコードベースが含まれます。このセカンダリコードベースはテストスイートで、プライマリコードベースがバグなしで正常に機能していることを確認する一連のアサーションとして機能します。開発中、これらのテストは、新しいコードによって既存の機能に不具合が生じていないことを検証するために開発者によって実行されます。これらのテストケースは、この検証プロセスを自動化するために外部ツールによって実行することもできます。CI サービス製品は、ユーザーが指定したイベントが発生したときにプロジェクトに対してテストケースを自動的に実行します。通常、開発者がバージョン管理システムを使用してコードをプッシュすると、イベントによって完全なテストスイートの自動実行がトリガーされます。

ビルド自動化

「ビルド」は、ソフトウェアプロジェクトの現在のリリースバージョンをスナップショットするために作成されるアーティファクトです。ビルドは、さまざまなネットワークを介してエンドユーザーに配布されます。通常、プロジェクトはスクリプト化されたステップのセットを受け取ってビルドアーティファクトを作成します。CI ツールは、バージョン管理システムの自動トリガーを使用してこのビルドプロセスを合理化します。たとえば、新しいコードがコードベースのプロダクションブランチにマージされると、ユーザーがダウンロードできるようにリモートサーバーにビルドをアップロードするトリガーがあります。

デプロイメントの自動化

ビルドは、配布準備が整うとデプロイされます。デプロイの結果はプロジェクトによって異なります。たとえば、ウェブプロジェクトは公的にアクセスできるウェブサーバーにデプロイされます。このデプロイ中に、ビルドフェーズで生成されたアーティファクトがウェブサーバーにコピーされます。デプロイプロセスはモバイルとデスクトップで異なり、ユーザーがアプリをダウンロードできるように「ストア」へのアップロードが行われる場合があります。

継続的インテグレーションツールの比較

Bitbucket Pipelines

要約: Bitbucket Pipelines は、アトラシアンが提供するクラウド版のバージョン管理システムである Bitbucket に直接組み込まれている CI ツールです。すでに Bitbucket にプロジェクトがある場合、Bitbucket Pipelines は CI を有効にするための簡単な次のステップです。Bitbucket Pipelines はコードとして管理されるため、パイプライン定義をコミットし、ビルドを開始することが簡単にできます。さらに、Bitbucket Pipelines は CD も提供します。つまり、Bitbucket Pipelines でビルドしたプロジェクトはプロダクションインフラストラクチャにもデプロイできます。

 

 特長:

  • セットアップと設定が容易
  • 統合された Bitbucket エクスペリエンス
  • サードパーティーによるクラウド

 

ウェブサイト: https://bitbucket.org/product/features/pipelines 

Jenkins

要約: Jenkins は、長年にわたる実績がある CI ツールです。オープンソースで、コミュニティによってアップデートされます。Jenkins は主にオンプレミスにインストールされます。組織が HIPAA 準拠データなどの機密性の高い顧客を扱うためのオンプレミスサポートを必要としている場合、Jenkins は最適なオプションです。

 

 特長:

  • オンプレミス
  • オープンソース
  • 堅牢なアドオン/プラグインエコシステム

 

ウェブサイト: https://jenkins.io/

AWS CodePipeline

要約: Amazon Web Services (AWS) は、市場で最も支配的なクラウドインフラストラクチャプロバイダーで、あらゆるタイプのインフラストラクチャおよびコード開発タスクに対応するツールとサービスを提供しています。CodePipeline は、AWS の CI ツール製品で、その他の既存の AWS ツールと直接連携し、シームレスな AWS エクスペリエンスを提供します。

 

 特長:

  • 完全なクラウド
  • Amazon Web Service と統合
  • カスタムプラグインサポート
  • 堅牢なアクセス制御

 

ウェブサイト: https://aws.amazon.com/codepipeline/

 

CircleCI

要約: CircleCI は、最も一般的なバージョン管理システムクラウドホスティングツールである Github と円滑に連携する CI ツールです。CircleCI は、バージョン管理システム、コンテナシステム、デリバリーメカニズムのマトリックスをサポートするという点で最も柔軟な CI ツールの 1 つです。CircleCI は、オンプレミスでホストすることも、クラウド製品を介して使用することもできます。

 

 特長:

  • CI イベントからの通知トリガー
  • クイックビルド用に最適化されたパフォーマンス
  • SSH とローカルビルドによる容易なデバッグ
  • ビルドのパフォーマンスを測定する分析

 

ウェブサイト: https://circleci.com/

 

Azure Pipelines

要約: Azure は、Microsoft のクラウドインフラストラクチャプラットフォームで、Amazon Web Services の Microsoft 版です。Azure は、上記の AWS CodePipeline と同様に、Azure のホスティングツールスイートに完全に統合されている CI ツールを提供します。

 

 特長:

  • Azure プラットフォームの統合
  • Windows プラットフォームのサポート
  • コンテナのサポート
  • Github の統合

 

ウェブサイト: https://azure.microsoft.com

 

GitLab

要約: Gitlab は、完全な DevOps エクスペリエンスを提供する新しい CI ツールです。Gitlab は、Github の全体的なエクスペリエンスを改善するために作成されました。Gitlab は、コンテナをサポートする最新の UX を提供します。

 

 特長:

  • オンプレミスまたはクラウドホスティング
  • 継続的セキュリティテスト
  • UX の学習が容易

 

ウェブサイト: https://about.gitlab.com

 

Atlassian Bamboo

要約: アトラシアンのもう 1 つの CI 製品です。Bitbucket Pipelines は純粋なクラウドホスト型のオプションですが、Bamboo は自己ホスト型の代替オプションです。

 

 特長:

  • アトラシアン製品スイートとの最適な統合
  • 広範なアドオンおよびプラグインオプション
  • Docker エージェントによるコンテナサポート
  • IFTTT 機能のためのトリガー API

 

ウェブサイト: https://www.atlassian.com/software/bamboo

 

 

貴社に最適な CI ツールは何ですか?

チームの CI ツールを選択する際には、考慮すべき重要な意思決定要因がいくつかあります。

バージョン管理システムのサポート

CI/CD システムの中心的な柱は、基盤となるバージョン管理システム (VCS) のサポートと統合です。最も一般的な VCS は、Git、Subversion、Mercurial、Perforce です。クラウド CI ツールは、これらすべての VCS をサポートするものもあれば、その一部をサポートするものもあります。お客様のプロジェクトの VCS をサポートする CI ツールを選択することが重要です。

オンプレミスとクラウドの比較

上記の CI ツールのいくつか (Jenkins など) は、オンプレミスにインストールできます。この場合は、お客様のチームがお客様のインフラストラクチャで CI システムの設定と管理を行うことになります。これはプライバシーとセキュリティ上の理由で役立ちます。たとえば、顧客のデータプライバシーに関してコンプライアンス標準を満たすことに懸念がある場合は、オンプレミスが必要になることがあります。さらに、オンプレミスインスタンスでは、より詳細なカスタマイズおよび設定オプションを使用できる場合があります。

オンプレミスは、ビジネスの中心的なニーズとは異なる追加作業になる場合があります。クラウドオプションでは、CI ツールの管理をサードパーティーベンダーにアウトソーシングします。クラウドホスティング会社は、CI ツールのアップタイム、サポート、および拡張を管理し、お客様のチームが中心的なビジネスニーズに専念できるようにします。これは、予算が限られているチームや、製品を市場に適合させる目標に必死に取り組む必要がある小規模企業にとって非常に大きなメリットになり得ます。

コンテナのサポート

コンテナ化は最新のソフトウェア開発のトレンドです。コンテナ化を使用すれば、アプリケーションの変更不能で繰り返し可能な分離されたコピーを配布できます。コンテナ化は、Docker や Kubernetes などのツールを使用して実現できます。最新の CI ツールでは、コンテナの CI/CD プロセスへの統合がサポートされます。コンテナは、「自分のマシンでの作業」の問題を解決し、アプリケーションコードがシステムレベルの依存関係の凍結スナップショットにパッケージ化されるようにします。これにより、チームのコードが CI ツールで実行されたときにローカル環境にレプリケートされることが保証され、コンテナが無い場合に発生する環境パリティのトラブルシューティングの課題がすべて排除されます。

プラグインとサードパーティーとの統合

CI ツールは、その他のテクノロジースタックと統合するとさらに便利になります。CI ツールからエンジニアリングチームの効率性とパフォーマンスに関する分析を収集できます。スプリントプランニングアプリケーションと CI ツールを組み合わせると、コードが配信されたときにスプリントステータスが自動的に更新されます。これらの統合を使用すると、エンジニアリングチームの KPI とロードマップの指針を示すことできます。

CI で始める

パフォーマンスの高いエンジニアリングチームを実現するには、最新の CI ツールが不可欠です。エンジニアリングチームは、CI ツールを使用してコミュニケーションとデリバリー速度を最適化できます。市場には、人気のある CI ツールが多数あります。CI ツールを選ぶときに考慮する必要がある柱となる概念は、バージョン管理サポート、オンプレミスとクラウドホスティングの比較、デプロイパイプライン、および外部アプリケーションとの統合です。