2022年4月11日

Continuous Integration

AWSのVMでCIを活用する

ベータ版サポートに伴い、ハウツーガイドが登場しました。この記事では、AWS VMでサポートされている機能について、その設計とアーキテクチャーを探ります。

harness_aws

Harness CIは最近、AWS仮想マシン(VM)のベータサポートを追加しました。この追加により、CIビルドはHarnessプラットフォームのKubernetesクラスターまたはAWS VMのいずれでも実行できるようになります。この記事では、AWS VMでサポートされる機能を調べ、その設計とアーキテクチャーを探ります。

AWS VMの機能には、.NETのTest Intelligenceのサポートが付属しています。Kubernetesインフラを使ったHarness CIに既に存在する全ての機能をサポートしています。大きな追加機能は、Windows OS上でのビルドの実行をサポートすることです。これとは別に、実行ステップはホストVM上でコマンドを実行することも可能です。従って、AWS VMは、コンテナ内での実行に適さないCIパイプラインのデフォルトの選択となります。

さらに、ステップではAWS VMを使用してパイプライン上でDockerコマンドを実行することができます。これは、podへの特権的なアクセスに制限のあるKubernetesインフラストラクチャーでは実現できないかもしれません。

設計

CIステージは全て専用のAWS VM上で実行され、ビルドの実行が完了すると終了します。複数のビルドにVMを再利用するよりも、このアプローチの大きな利点は、全てのビルドが新しいVM上で実行されるため、ワークスペースのクリーンアップが必要ないことです。

この機能を使用するには、デリゲートVMにDrone Runner AWSをインストールする必要があります。ランナー付きのデリゲートをインストールする手順は、こちらで確認できます。ランナーは、作成、削除などを含むAWS VMのライフサイクル管理を担当します。さらに、CIビルドが実行されるVM上のステップの実行を処理します。ランナーは起動時にHTTPSサーバーを起動し、デリゲートエージェントはポート3000のlocalhost上でそのサーバーと対話します。

delegate_vm.webp

 

CIビルドの実行は、初期化、ステップ実行、クリーンアップの3つのフェーズで構成されます。これらのフェーズは全てデリゲートタスクで行われます。

初期設定

このフェーズでは、ビルドを実行するために必要なリソースを作成します。初期化タスクがデリゲートエージェントに到達すると、ランナーを呼び出してビルドが実行されるVMを作成します。 

RunnerはAWS golang sdkを使用してAWS VMを作成します。VM作成の一部として、エージェント、特にlite-engineもビルドVMにインストールします。lite-engineのインストールは、クラウドからダウンロードし、VMの起動時に起動するcloud-initスクリプトを介して行われます。lite-engineはHTTPSサーバーを起動し、ランナーが安全なチャネルを介して通信するために使用されます。 

lite-engineのHTTPSサーバーは、サーバー証明書とクライアント証明書の両方で自己署名証明書を使用しています。クライアント証明書はランナー上に存在し、クライアント(ここではランナー)のアイデンティティーをサーバーに認証するために使用されます。また、lite-engineに存在するサーバー証明書は、転送中のデータを暗号化するために使用されます。

ステップ実行

ステップ実行フェーズでは、CIパイプラインで定義された順序でステップを実行します。ステップを実行するタスクがデリゲートに到達すると、デリゲートはランナーを呼び出して実行させます。そして、ランナーはhttpsでlite-engineを呼び出してステップを実行します。lite-engineは、サブプロセスとしてVM上で直接ステップを実行するか、Dockerコンテナ上で実行します。

クリーンアップ

クリーンアップフェーズは、CIステージの完了を意味します。ビルドの実行に割り当てられたリソースを削除します。デリゲートエージェントはクリーンアップタスクを受け取ると、ランナーを呼び出し、完了したビルドに割り当てられていたAWS VMを削除します。

VMプール

VMの起動には数分かかることがあり、特にWindows VMは起動に6~8分かかります。VMがビルド実行の一部として作成される場合、VMの起動時間のためにビルド時間が大幅に増加する可能性があります。

Harnessは、ユーザーが指定した数のウォームAWSインスタンスを維持するプーリング戦略を使用しています。ウォームインスタンスとは、VMの起動が完了している初期化済みのAmazon Elastic Compute Cloud(Amazon EC2)インスタンスです。CIステージを持つパイプラインが実行されるたびに、初期化時のランナータスクは、プール内にAWSインスタンスが存在するかどうかをチェックします。存在する場合は、プールから切り離され、CIステージの実行に割り当てられます。ランナーは、プールのサイズを維持するために、新しいAmazon EC2インスタンスを作成します。従って、VMプールは、初期化が数分ではなく、数秒で完了することを確認します。

vm_initialization.webp

VMプールは、ランナー構成ファイルの一部として定義する必要があります。これにより、プールのサイズや、AMI、インスタンスタイプ、ネットワークなど、VMの構成を設定することができます。

結論

Harness CI with AWS VMは、Amazon EC2インスタンス上でLinuxとWindowsのビルドを実行する柔軟性を提供します。このハイレベルな設計概要から、Harness CIがAWS VMでどのように動作するかについての洞察を得ることができれば幸いです。

ご自分の目で確かめてみませんか?今すぐHarness CIの無料トライアルにお申し込みください。


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ