はじめに
こんにちは、ACS事業部の過部です。
この記事では、Azure PipelinesでSelf-hosted agentを利用するための作業手順をご紹介します。
Self-hosted agentとは
Azure Pipelinesでパイプラインを実行するためには、実際の処理を担うエージェントが必要となります。
エージェントには以下のような種類があり、その中の1つがSelf-hosted agentに当たります。
- Microsoft-hosted agent - Microsoftが提供する実行環境を利用
- Self-hosted agent - 独自に用意したVMを実行環境として利用
- Azure virtual machine scale set agent - 独自に用意したVMSS(Virtual Machine Scale Set)を実行環境として利用。Self-hosted agentの一種。
Self-hosted agentは、独自に用意したVMにエージェント用プログラムをインストールし、エージェント化させたものを指します。VM本体の用意、メンテナンス及びアップグレードを独自で行う必要が出てくる代わりに、実行環境を細かく制御できる様になります。
Self-hosted agentの利用ケース
Self-hosted agentを利用することで、Microsoft-hosted agentでは実現困難な以下のケースに対応できます。
- エージェントがアクセスするAzureリソースにIPアドレス制限を実装したい
- エージェントがアクセスするAzureリソースをプライベート化したい
Microsoft-hosted agent利用時は、ジョブごとにMicrosoftが保有するエージェントの中からランダムで割り当てられます。ランダムなパブリックIPアドレスを用いてエージェントからAzureリソースへアクセスする形になるため、①IPアドレス制限の許可リストに登録できない、②プライベートなAzureリソースに到達できない といった課題がありました。
Self-hosted agentの場合は、エージェントのIPアドレスが固定化されるため、Azureリソース側でIPアドレスを指定して許可することが可能です。 また、プライベート化されたAzureリソースと同一VNetにVMをデプロイすることで、プライベートIPを用いてAzureリソースに到達することが可能です。
アクセス先AzureリソースにIPアドレス制限を実装する場合
アクセス先Azureリソースをプライベート化する場合
前提条件
- エージェント用ホストマシンとしてオンプレVMも利用可能ですが、今回はAzure VMを利用します。
- エージェントはLinux、macOS、Windows、及びDocker コンテナーにインストール可能ですが、今回はUbuntu 20.04を利用します。
- エージェントにはLinux x64用2.213.2バージョンのバイナリファイルを利用します。
- Azureリソースの作成はLinux上でaz-cliを用いて行います。
作業手順の全体像
以下のような流れで作業を行います。
- まずAzure DevOps上で準備作業を行う(①②)
- 次にターミナル上でaz-cliを用いて各種Azureリソースを作成する(③)
- 最後にVMにSSHしてエージェント登録作業を行う(④)
手順① Agent Poolの作成
エージェントとAzure Pipelinesを紐づけるためには、エージェントをAzure PipelinesのAgent poolに追加する必要があります。そのため、まずはAzure Devops上でAgent Poolを作成します。
Agent Pool設定画面へ移動
Self-hosted agentを利用したいプロジェクトのトップ画面へ移動し、Project Settings -> Agent pools -> Add pool の順にクリックします。
各種パラメータ入力
設定用のポップアップが開くので、上記の様に各値を入力し、右下のCreateをクリックします。
手順② PATの作成
エージェントをAzure Pipelinesに登録するためにはをPATを入力する必要があります。エージェント登録の実施者が正規のAzure DevOpsユーザーであることを保証するためです。
そのため、引き続きAzure DevOps上でPAT(Personal Access Token)を作成していきます。
PAT設定画面へ移動
Uesr settings(右上のマーク) -> Personal access tokens -> New Token の順にクリックします。
各種パラメータ入力
設定用のポップアップが開くので、上記の様に各値を入力し、左下のCreateをクリックします。
※ Agent Pools項目が表示されない場合は、左下のShow more scopesをクリックしてください。
PAT値を確認
無事作成できたら、PAT値がこの場限りで表示されます。
次の手順で利用するので、大切に控えてください。
手順③ 各種Azureリソースの作成
ターミナル上で以下のコマンドを実行します。
# ResourceGroupの作成 az group create --location japaneast \ --name "rg-sample" # ネットワークの作成 az network vnet create --name "vnet-sample" \ --resource-group "rg-sample" \ --location japaneast \ --address-prefixes "192.168.0.0/24" \ --subnet-name "snet-sample" \ --subnet-prefixes "192.168.0.0/28" # VMの作成 az vm create --name "vm-sample" \ --resource-group "rg-sample" \ --image UbuntuLTS \ --size Standard_B2s \ --admin-username azureuser \ --vnet-name "vnet-sample" \ --subnet "snet-sample" \ --generate-ssh-keys
手順④ VMをAzure Pipelinesへ登録
VMへSSH後、以下の様に登録作業を行います。
# VMへSSH接続 ssh azureuser@XXX.XXX.XXX.XXX # Self-hosted agent用ツールのダウンロード及び解凍 mkdir myagent && cd myagent curl -LO https://vstsagentpackage.azureedge.net/agent/2.213.2/vsts-agent-linux-x64-2.213.2.tar.gz tar zxvf vsts-agent-linux-x64-2.213.2.tar.gz # Self-hosted agentの対話的な初期設定 ./config.sh ___ ______ _ _ _ / _ \ | ___ (_) | (_) / /_\ \_____ _ _ __ ___ | |_/ /_ _ __ ___| |_ _ __ ___ ___ | _ |_ / | | | '__/ _ \ | __/| | '_ \ / _ \ | | '_ \ / _ \/ __| | | | |/ /| |_| | | | __/ | | | | |_) | __/ | | | | | __/\__ \ \_| |_/___|\__,_|_| \___| \_| |_| .__/ \___|_|_|_| |_|\___||___/ | | agent v2.213.2 |_| (commit 4f90e68) >> End User License Agreements: Building sources from a TFVC repository requires accepting the Team Explorer Everywhere End User License Agreement. This step is not required for building sources from Git repositories. A copy of the Team Explorer Everywhere license agreement can be found at: /home/azureuser/myagent/license.html # 今回はTFVCを利用しないため、Nを入力 Enter (Y/N) Accept the Team Explorer Everywhere license agreement now? (press enter for N) > N >> Connect: # Azure DevOpsのOrganizationトップページのURLを入力 Enter server URL > https://dev.azure.com/XXXXX # PATを選択 Enter authentication type (press enter for PAT) > # PATの値を入力 Enter personal access token > **************************************************** Connecting to server ... >> Register Agent: # Agent Pool名を入力 Enter agent pool (press enter for default) > sample # Agent名を設定。デフォルトはAzureリソース名 Enter agent name (press enter for vm-sample) > # 作業フォルダを設定。デフォルトは_work Enter work folder (press enter for _work) > # Self-hosted agent用ツールのインストール sudo ./svc.sh install azureuser # Self-hosted agent用サービスの開始 sudo ./svc.sh start
エージェント登録の確認
最後にエージェント登録が完了したことをAzure DevOps上で確認します。
sample Agent Pool確認画面へ移動
プロジェクトのトップ画面へ移動し、Project settings -> Agent pools -> sample の順にクリックします。
登録済みエージェントの確認
先程登録したエージェントがOnline状態であることを確認します。
以上でSelf-hosted agentを利用するための準備作業は完了です。 パイプラインYAML内で以下の様に記述し、今回登録したエージェント上でパイプライン処理を走らせてみましょう。
pool: name: vm-sample
おわりに
今回はAzure PipelinesにおけるSelf-hosted agent利用手順をご紹介しました。 別の記事でVMSSをエージェントとして利用するための手順も紹介しているので、興味がある方はこちらの記事をご覧ください。 また、Azure Pipelinesを用いたCI/CDの一例として、Terraformを使ったインフラCI/CDの実装例もこちらで紹介しております。
最後に、 私たちはAzure・AKSを活用したシステムのSIや内製化のお手伝いをさせていただいております。ご相談等ありましたらお気軽にご連絡ください。