サービスとしてのCI / CD:クラウドでの継続的インテグレーションとデリバリーのための10のツール

クラウドと継続的インテグレーション(CI)は自然に一致します。クラウドは物理サーバーのインストールと保守の苦痛から私たちを解放しますが、継続的インテグレーションはコードの構築、テスト、および展開の苦痛の多くを自動化します。両方が開発チームの肩から離れることを目的としている場合、それらを組み合わせて、1つのステップでさらに面倒な作業を排除することは意味があります。

多くの継続的インテグレーションサービスがあり、少なくとも抽象的な意味では、それらはすべてほとんど同じことを行います。それらは、コンパイルやテストなど、世界が新しいソフトウェアの天才を評価する前に実行する必要のあるタスクのリストから始まります。コード行をコミットすると、ツールは障害にぶつかるまでチェックリストの処理を開始します。障害物がなければ、誰もが幸せです。

誰でも任意のソフトウェア開発プロジェクトに継続的インテグレーションを使用できますが、最大の利点はチーム、できれば同じ連動するコードブロックで作業している大規模なチームが享受できます。継続的インテグレーションの最も徹底的な実装では、テストと再テストの前にコードをビルドおよび再構築します。すべて、さまざまなチームメンバーがコードをチェックインするときに作成された可能性のある新しいエラーと非互換性を探します。継続的インテグレーションサーバーは、すべてのプログラマーの作業を同期し、チームが問題を検出するのに役立ちます。 

CIサーバーのタスクの一部のリストはテストで終了しますが、最近、新しいコードのデプロイメントを含むようにリストを拡張するチームが増えています。このプロセスは、「継続的デプロイメント」と呼ばれることもあります。完全に自動化された展開は、一部の人々を緊張させ、プロセスに手動で一時停止を追加することがよくあります。説明責任と人間の保証を少し加えることで、彼らは少しリラックスすることができます。彼らは、このハイブリッドアプローチを「継続的デリバリー」と呼びます。これは、コードをステージングまたはテストクラスターに配信し、人間が本番環境に最後にプッシュするのを待つためです。 

ホールの下のサーバールームで継続的インテグレーションが優れている場合、より高速な配信とより高い効率の大きな機会があるクラウドではさらに優れている可能性があります。最良の場合、クラウドは作業を分割し、タスクを並行して実行できます。サービスはハードウェアの大規模なプールから始まり、それを多くのチーム間で共有します。全員が同時にコードをプッシュしない限り、ビルドとテストははるかに高速に実行されます。開発者がすべてのテストを実行したい瞬間に同じ巨大なハードウェアラックを購入することは法外なことですが、チームがラックを共有すれば、全員が爆発的なスピードを楽しむことができます。

しかし、危険と心配があり、最大のものはコントロールの喪失である可能性があります。すべてのクラウドサービスでは、コードをサードパーティに渡す必要があります。これは、一部の人には解放されているように感じられるかもしれませんが、他の人には恐ろしい選択です。すべてのクラウドサービスはセキュリティを強調するように努めていますが、コードが自分の屋根の下にあると、どういうわけかそれは違った感じになります。

これらのサービスは、すべての主要言語の幅広いサポートに加えて、驚くほど多くのマイナー言語と、いくつかの本当に奇妙で珍しい言語をカバーしています。これは、開発者による英雄的な努力よりも、最初の優れたアーキテクチャ上の決定の結果です。タスクのリストは、ほとんどの場合、一部のシェルまたはコマンドラインのコマンドとしてエンコードされるため、継続的インテグレーションツールは、リストが使い果たされるか、克服できない障害が発生するまで、ほとんどコマンドを発行し続けます。Javaなどの一部の言語は、より高度なオプションを提供しますが、ほとんどの場合、ツールはコマンドラインで実行できるすべてのことを実行できます。 

クラウドで継続的インテグレーションを行うための10の異なるオプションがあります。

CloudBees

CloudBees Coreは、継続的インテグレーションのための有名なオープンソースプロジェクトであるJenkinsから始まり、テスト、サポート、およびコードが正しく実行されることの保証を追加しました。同社はすべての実験的なプラグインを選別し、独自のプラグインをいくつか追加してから、必要なときに期待どおりに機能するように適切なプラグインを磨きました。

CloudBeesは依然としてJenkins開発チームの80%を採用しており、オープンソースプロジェクトにコードを頻繁に提供しているため、この主要なプラットフォームを十分に理解していると確信できます。物事をスピードアップするために、CloudBeesは、開発プロセスを追跡するためのインストルメンテーションだけでなく、広範な並列化も追加しました。

CloudBeesは、無料利用枠から「スターターキット」まで、1年間のサービスでさまざまな価格帯を提供しています。同社はまた、ツールのサポートが必要であるが、クラウドコンピューティングを必要としない、または必要としない人のために、Jenkinsのサポートを開始します。

AWS CodePipeline

継続的インテグレーションとデプロイのためのAmazonのツールであるAWSCodePipelineは、コードとデータのより複雑な経路を受け入れながら、AWSサーバーにコードを配信するように最適化されています。基本ツールは、主要言語(Java、Python、Node.js、Ruby、Go、Android、.Net Core for Linux)用に事前構成されたビルド環境を適切に選択し、結果を送信する前にS3バケットにダンプします。サーバーに移動して実行を開始します。

わずかに異なる名前のレイヤーが驚くほど多数あります。CodeBuildは、CodePipelineによってトリガーされたときに、CodeCommitから最新の天才を取得し、その結果をCodeDeployに渡します。構成するコードが多すぎる場合は、別の自動化レイヤーを提供するCodeStarに直接ジャンプできます。私たちのすべての間違いを自動的に一掃するCodeBugEraserStarがあれば。これらのコードレイヤーのいずれにも技術的に料金を支払わないことに注意してください。Amazonは、途中で使用されたコンピューティングリソースとストレージリソースに対してのみ請求します。それはそれのように感じますが、それは完全に無料ではありません。

Bitbucketパイプライン

人気のあるジョブ追跡ボードであるJiraとコードリポジトリであるBitbucketの開発者であるAtlassianは、Bitbucketクラウドに継続的インテグレーションツールであるBitbucket Pipelinesを作成することで、ワークフローの保持を活用することを決定しました。秘訣は、この場合、ビルドメカニズムとAtlassianの他のツール間の接続という形での統合です。少なくとも見た目には、パイプラインは別のものではありません。これは、Bitbucketの各プロジェクトの単なる別のメニューオプションです。別のメニューオプションは展開を指し、ビルドが終了する場所を選択できます。

接続は祝福と制限です。主要言語(Java、JavaScript、Python、PHP、.Netなど)用にすでに定義されているテンプレートの1つを選択すると、数回クリックするだけでコードをビルドおよびデプロイできます。しかし、標準から逸脱すると、オプションがないことに気付くでしょう。 Atlassianは、チャートと他のサービスへのWebhookが混在しているように見えるアプリのマーケットプレイスを奨励しています。私がこれを書いているチャートの一番上のアプリは、BitbucketをJenkinsに接続し、おそらく壁の内側ではすぐに実行できないことを実行します。

パイプラインの主な利点は速度です。Atlassianは、コードからデプロイメントの実行までの主要な経路のほとんどを事前に設計しており、わずか数ドルで会社の足跡をたどることができます。ほとんどのサーバーレスモデルと同様に、ビルドの価格は数分であるため、Bitbucketの使用コストを比較するのは困難ですが、チームは多くの場合、インスタンスのクラスターをJenkinsビルドの処理専用にします。夜間や週末にシャットダウンしても、時間は加算されます。

GitLab CI / CD

Atlassianの最大の競争相手の1つはGitLabです。これは、指と実行中のデプロイメントの間のプロセスのすべてのステップを処理したいと考えている別の会社です。GitLabのビルド、テスト、デプロイのメカニズムも同様にGitリポジトリに直接接続されているため、コミットメント時にトリガーできます。このプロセスは主にDockerコンテナーを中心に構築されており、このキャッシュにより、Jenkinsビルドを中心に実行する必要のある構成作業の一部を大幅に簡素化できます。

ビルドタスクは任意の言語をターゲットにすることができますが、ほとんどのプラットフォームで使用できるGoで記述された自動スケーリングツールであるGitLabRunnerによってトリガーされる必要があります。この柔軟性は、他のマシンで任意のランダムジョブをトリガーできることを意味します。これは、マイクロサービスを提供するだけではない複雑なアーキテクチャで役立つ可能性があります。

価格設定は、ニーズに合わせてさまざまな階層にバンドルされています。たとえば、ゴールドティアグループは、セキュリティダッシュボードや、マシンの共有クラスター上での50,000分の構築などの最高の機能をすべて利用できます。プロセスの一部に独自のマシンを使用したり、他のクラウドのインスタンスを個別に使用したりするのに料金はかかりません。

CircleCI

継続的インテグレーションツールの多くは、Linux環境で構築できるコードに焦点を合わせています。CircleCIはLinuxの世界で構築および提供されますが、AndroidアプリおよびAppleのXcode(iOS、MacOS、tvOS、またはwatchOS用)から提供されるすべてのものを構築する製品も提供します。これらのプラットフォーム用のアプリを作成しているチームで作業している場合は、コードをコミットして、CircleCIにチームの多様な天才すべてにテスト規律を適用させることができます。

タスクのリストはYAMLファイルで詳しく説明されています。 CircleCIは、すべての多層的な栄光の中でDockerを使用して、コードのテスト環境を構成します。ビルドは新しいコンテナーから始まり、すべてのテストも同様です。 Macの作業は、同様に寿命が短い仮想マシンで実行されます。これにより、クリーンな環境に残りのビットがないため、構成に関する問題の一部が回避されます。 (つまり、問題の原因がデジタルフローサムの長引くことである場合は、それが原因です。)

価格設定は、ビルドがどれだけのCPUを消費するかに焦点を合わせています。ユーザー数とリポジトリ数は無限大に制限されています。ただし、このビルドを実行するビルド分とコンテナーの数は計測されます。最初のコンテナは無料で、その中で1つのビルドを実行できます。より多くの並列処理またはより多くのスループットが必要な場合、CircleCIはいくらかのお金を稼ぐことができます。Macユーザーには同じ無料の取引はありませんが、サービスをテストする人のための入門プランがあります。

Travis CI

ビルドでWindowsボックスでテストする必要のあるコードが生成される場合、TravisCIはシングルストップを提供します。同社はしばらくの間MacOSとLinuxのオプションを提供してきましたが、Windowsオプションを展開したばかりなので、さらに多くの場所で実行されるコードを簡単に作成できます。

タスクリストもYAMLで詳しく説明されており、ジョブはかなり標準的な構成のクリーンな仮想マシンで実行されます。LinuxコードはUbuntuのいくつかの基本バージョンを取得し、MacコードはOSXとXcodeおよびJDKの12の組み合わせの1つで実行されます。現時点では、Windowsコードは1つのバージョンのWindows Server(1803)でしか使用できません。Travis CIは、事前に構成され、実行の準備がほぼ整っている30の言語とビルドルールの長いリストを提供します。

料金は、一度に実行できる同時ジョブの数に基づいていますが、これらのビルドにかかる分数に正式な制限はありません。これは、作業用に固定数の専用インスタンスを取得し、それらがいつでも準備ができているようなものです。プロプライエタリ作業のための無料のオプションはありませんが、オープンソースプロジェクトは「常に無料」であるため、TravisCIを試す最も簡単な方法かもしれません。

Azureパイプライン

現代のマイクロソフトが「ここで発明されていない」という態度を持っているかどうか疑問に思うなら、Azureパイプライン以外に探す必要はありません。販売資料には、「あらゆる言語、あらゆるプラットフォーム」と書かれています。これはほぼ間違いなく少し誇張であり、AzureはおそらくENIACプログラマーに提供するものがあまりありませんが、コード用のMicrosoft、Linux、およびMacOSパスを目立つように提供します。AppleコーナーはMacOSビルドのみを対象としており、iOS、tvOS、watchOSは対象としていませんが、気にしないでください。これは半分以上いっぱいのグラスです。

要約すると、システムは他のシステムと似ています。ビルドを実行してアーティファクトを生成するエージェントがあります。そのオプションが役立つ場合、これらの一部はセルフホストできます。スタックはDockerコンテナーを完全に包含しており、Azureのハードウェアはそれらを実行する準備ができています。これらの詳細はすべて、Webページに組み込まれているビジュアルデザイナーと一緒にクリックするか、コマンドラインの世界に住みたい場合はYAMLで指定できます。

価格には、ビルド時間が1800分の無料の「並列ジョブ」が付属しています。より多くの並列処理またはより多くの構築時間を必要とする場合は、支払いを開始します。この計画には、オープンソースプロジェクトのための寛大な無料枠が含まれており、一般的なオープンソースコミュニティに参加したいというマイクロソフトの願望を再び強調しています。しかし、MicrosoftがGitHubを買収してテーブルの席を購入するために75億ドルを費やすつもりなら、まあ、それは十分に理にかなっています。このコードはすべてどこで実行されますか?Azure Pipelinesは、Azureハードウェアにスムーズに移行できることを嬉しく思います。