2024年3月9日土曜日

Azure Devops の pipeline で独自の Pool (Agent) を構築し pipeline を実行する方法

Azure Devops の pipeline で独自の Pool (Agent) を構築し pipeline を実行する方法

概要

前回 パイプライン機能の実行方法を紹介しました
デフォルトでは Microsoft が提供する pool にあるエージェントを使って実行しました
その場合は共有のリソースになるので順番待ちになったりします
今回は独自で Pool (Agent) を構築しパイプラインを実行する方法を紹介します

環境

pool の追加

Project Settings -> Agent pools -> Add pool を選択します

Pool type は「Self-hosted」を選択します
Name には好きな名前の pool 名を指定します (あとで azure-pipelines.yml から指定するのに使います
今回は権限はすべてパイプラインが扱えるようにします

Pool が作成されると一覧に表示されます

エージェントの追加

作成した Pool に Agent を追加します
実際パイプラインが実行されるのは Agent で Pool はエージェントを管理するグループになります

作成した test_pool を選択し右上の「New agent」を選択します

するとエージェントをインストールし構築する手順が表示されるので指示通りにインストールしましょう (手順が古い場合があるので注意、後述に詳細あり

エージェントの構築

azure-pipelines-agent をインストールします

docker でも動作しますが今回は初回なので指示通りバイナリインストールで構築します
ただコンパネで表示されるコマンドのエージェントのバージョンはかなり古いのでリポジトリにある安定の最新版をインストールするようにしましょう
Agent は今回 Ubuntu 上に構築します

  • mkdir azure_devops_agent && cd azure_devops_agent
  • wget https://vstsagentpackage.azureedge.net/agent/3.234.0/vsts-agent-linux-x64-3.234.0.tar.gz
  • tar zxvf vsts-agent-linux-x64-3.234.0.tar.gz
  • ./config.sh
  ___                      ______ _            _ _
 / _ \                     | ___ (_)          | (_)
/ /_\ \_____   _ _ __ ___  | |_/ /_ _ __   ___| |_ _ __   ___  ___
|  _  |_  / | | | '__/ _ \ |  __/| | '_ \ / _ \ | | '_ \ / _ \/ __|
| | | |/ /| |_| | | |  __/ | |   | | |_) |  __/ | | | | |  __/\__ \
\_| |_/___|\__,_|_|  \___| \_|   |_| .__/ \___|_|_|_| |_|\___||___/
                                   | |
        agent v3.234.0             |_|          (commit 21ca259)


>> 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/devops/work/azure_devops_agent/license.html

Enter (Y/N) Accept the Team Explorer Everywhere license agreement now? (press enter for N) > Y

>> Connect:

Enter server URL > https://dev.azure.com/xxx/
Enter authentication type (press enter for PAT) >
Enter personal access token > ****************************************************
Connecting to server ...

>> Register Agent:

Enter agent pool (press enter for default) > test_pool
Enter agent name (press enter for agent01) >
Scanning for tool capabilities.
Connecting to the server.
Successfully added the agent
Testing agent connection.
Enter work folder (press enter for _work) >
2024-03-07 04:56:11Z: Settings Saved.

Server URL は自身の Azure Devops の URL を組織名付きで入力しましょう
プールの選択部分だけ test_pool にします
default でも特に問題ないですが azure-pipelines.yml で指定する pool 名も default にしましょう
他は基本はすべてデフォルトの設定で進めて OK です
設定できたら起動しましょう

  • ./run.sh
Scanning for tool capabilities.
Connecting to the server.
2024-03-07 04:59:08Z: Listening for Jobs

上記のようになれば起動完了です

liblttng-ust0 がない

もし必要なパッケージがまだインストールされていない場合は以下で自動でインストールできます

  • sudo ./bin/installdependencies.sh

詳しいインストール方法はこちらが参考になります

E: Unable to locate package liblttng-ust0 というエラーになる場合は bin/installdependencies.sh を編集して liblttng-ust0 -> liblttng-ust1 に変更して再度実行しましょう

また上記のエラーは azure-pipeline-agent のバージョンが古い場合にも起こるので解決策として最新の azure-pipeline-agent をインストールすると良いでしょう

個人アクセストークン (PAT) の取得

こちらを参考に取得しておきましょう

Azure Devops への疎通

azure-pipeline-agent から Azure Devops へ通信できる必要があります
Azure Devops から Agent への疎通は不要ですが最低限 Agent -> Azure Devops のエンドポイントへの通信は必要になります

動作確認

azure-pipelines.yml を編集して使用する pool を指定しましょう

trigger:
  batch: true
  branches:
    include:
    - master

pool: test_pool

jobs:
- job: TestJob
  steps:
  - script: |
      echo "Hello, Azure Pipelines!"
      cat /etc/issue
      uname -a
    displayName: "Run My Command"

これでプロジェクトのパイプラインを確認すると問題なくジョブが実行されていることが確認できると思います

default の pool で進めた場合は default pool にパイプラインを実行する権限がないので権限を与えて上げるとパイプラインが実行し始めると思います

最後に

Azure Devops の Pipeline で独自のエージェントを構築してパイプライン実行してみました
Gitlab Runner に非常に似ている感じになります

Azure Devops は pool ないに Agent を追加する感じです
Gitlab では GroupRunner などがそれにあたりますがやや管理方法が異なる感じになります

また gitlab-ci.yml と azure-pipelines.yml との互換性は全くないのでそこは書き換えなどの処理が必要です

参考サイト

0 件のコメント:

コメントを投稿