演習 - Azure 上で動作するビルド エージェントを作成する

完了

このユニットでは、Microsoft Azure で実行される仮想マシンを使用して、Microsoft Azure Pipelines で使用できるビルド エージェントを構成します。 このモジュールの期間中に使用できる仮想マシンが用意されています。

このユニットでは、次のことを行います。

  • ビルド エージェントとして機能する Ubuntu 仮想マシンを Azure に作成します。
  • Microsoft Azure DevOps でエージェント プールを作成します。
  • Azure DevOps でエージェントを認証するためのアクセス トークンを作成します。
  • Space Game Web サイトを構築するために必要なソフトウェアを使用してエージェントを構成します。
  • ビルド ジョブを受信できるように、Azure DevOps に接続するようにエージェントを構成します。
  • エージェントが Azure DevOps に接続され、ビルド ジョブを受け取る準備ができていることを確認します。

Azure で仮想マシンを作成する方法は多数あります。 このユニットでは、Cloud Shell という対話型ターミナルを使用して Ubuntu 仮想マシンを作成します。

VM を構成するには、いくつかの選択肢があります。

  • Linux VM の場合は、SSH 経由で直接接続し、システムを対話形式で構成できます。
  • ARM テンプレート、Bicep、またはその他の自動プロビジョニング ツールを使用して、デプロイを自動化できます。
  • 多数のビルド エージェントをデプロイする必要がある場合は、すべてのソフトウェアがプレインストールされた VM イメージを作成できます。

システムを対話形式で構成することは、プロセスと必要な内容を理解するのに役立ちます。 プロセスを簡略化するには、SSH 経由で Ubuntu VM に接続し、シェル スクリプトを実行してビルド エージェントを設定します。

Linux システムへの接続または構成に慣れていない場合は、次の手順に従ってください。 Windows ビルド エージェントにも同じ概念を適用できます。

Linux 仮想マシンを作成する

このセクションでは、ビルド エージェントとして機能する Ubuntu 20.04 を実行している VM を作成します。 VM はまだビルド エージェントとして設定されていないか、 Space Game Web アプリケーションのビルドに必要なツールを持っていません。 これからセットアップしていきます。

Azure portal を使用して Cloud Shell を起動する

重要

このモジュールの演習を完了するには、独自の Azure サブスクリプションが必要です。

  1. Azure Portal にアクセスしてサインインします。

  2. メニューから [Cloud Shell] を選択します。 メッセージが表示されたら、 Bash エクスペリエンスを選択します。

    Cloud Shell メニュー項目の場所が示されている Azure portal のスクリーンショット。

    Cloud Shell では、Cloud Shell で作成したファイルを保持するために Azure ストレージ リソースが必要です。 Cloud Shell を初めて開くと、リソース グループ、ストレージ アカウント、および Azure Files 共有を作成するように求められます。 この設定は、以降のすべての Cloud Shell セッションで自動的に使用されます。

Azure リージョンを選択する

リージョンは、地理的な場所内の 1 つ以上の Azure データセンターです。 リージョンの例としては、米国東部、米国西部、北ヨーロッパがあります。 Azure VM を含むすべての Azure リソースには、リージョンが割り当てられます。

コマンドの実行を容易にするには、まず既定のリージョンを選択します。 既定のリージョンを指定した後、別のリージョンを指定しない限り、後のコマンドでそのリージョンが使用されます。

  1. Cloud Shell から、Azure サブスクリプションから利用可能なリージョンを一覧表示するには、次の az account list-locations コマンドを実行します。

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 出力の Name 列から、近くのリージョンを選択します。 たとえば、eastasia または westus2 を選択します。

  3. az configureを実行して、既定のリージョンを設定します。 <REGION>を選択したリージョンの名前に置き換えます。

    az configure --defaults ___location=<REGION>
    

    この例では、既定のリージョンとして westus2 を設定します。

    az configure --defaults ___location=westus2
    

リソース グループを作成する

このトレーニング モジュールで使用されるリソースを含むリソース グループを作成します。

  • tailspin-space-game-rg という名前のリソース グループを作成するには、次の az group create コマンドを実行します。

    az group create --name tailspin-space-game-rg
    

VM の作成

VM を作成するには、次の az vm create コマンドを実行します。

az vm create \
    --name MyLinuxAgent \
    --resource-group tailspin-space-game-rg \
    --image canonical:ubuntu-24_04-lts:server:latest \
    --size Standard_DS2_v2 \
    --admin-username azureuser \
    --generate-ssh-keys

VM が起動するまでに数分かかります。

Standard_DS2_v2 は、VM のサイズを指定します。 VM のサイズは、そのプロセッサ速度、メモリの量、ストレージの初期量、予想されるネットワーク帯域幅を定義します。 これは、Microsoft がホストするエージェントによって提供されるのと同じサイズです。 実際には、より多くのコンピューティング能力やグラフィックス処理などの追加機能を提供するサイズを選択できます。

--resource-group引数は、作成する必要があるすべてのものを保持するリソース グループを指定します。 リソース グループを使用すると、ソリューションを構成するすべての VM、ディスク、ネットワーク インターフェイス、およびその他の要素を 1 つのユニットとして管理できます。

エージェント プールを作成する

エージェント プールがビルド エージェントを編成することを思い出してください。 このセクションでは、Azure DevOps にエージェント プールを作成します。 後で、エージェントを正しいプールに登録できるようにエージェントを構成するときに、エージェント プールの名前を指定します。

  1. Azure DevOps で、Space Game - web - Agent プロジェクトに移動します。

  2. [Project settings] を選択します。

  3. [パイプライン] で、[エージェント プール] を選択します。

    [エージェント プール] メニュー項目の場所が示されている Azure DevOps のプロジェクト設定のスクリーンショット。

  4. [プールの追加] を選択します。

  5. [ プールの追加] ウィンドウで、次の手順を実行します。

    1. [Pool to link](リンクするプール)[新規] を選択します。
    2. [ プールの種類] で、[ セルフホステッド] を選択します。
    3. [ 名前] に「 MyAgentPool」と入力します。

    実際には、プールのわかりやすい名前を選択します。

  6. を選択してを作成します。 新しいエージェント プールが一覧に表示されます。

個人用アクセス トークンを作成する

ビルド エージェントが Azure DevOps に自身を登録するには、自身を認証する方法が必要です。

これを行うには、個人用アクセス トークンを作成できます。 個人用アクセス トークン (PAT) は、パスワードの代わりに使用します。 PAT を使用して、Azure DevOps などのサービスで認証できます。

重要

パスワードの場合と同様に、アクセス トークンは安全な場所に保管してください。 このセクションでは、シェル スクリプトに表示されないように、アクセス トークンを環境変数として格納します。

  1. Azure DevOps でプロファイル設定を開き、[ 個人用アクセス トークン] を選択します。

    [個人用アクセス トークン] メニュー項目の場所を示す Azure DevOps のスクリーンショット。

  2. [ 新しいトークン] を選択します

  3. ビルド エージェントなど、トークンの名前を入力します。

  4. [ スコープ] で、下部 にある [すべてのスコープを表示 ] リンクを選択します。

  5. エージェント プールを探し、読み取りと管理を選択します。

  6. を選択してを作成します。

  7. トークンを安全な場所にコピーします。

    まもなく、トークンを使用して、ビルド エージェントが Azure Pipelines へのアクセスを認証できるようにします。

VM に接続する

このセクションでは、LINUX VM を構成できるように SSH 経由で接続します。

Microsoft でホストされているエージェントに対話形式でサインインできないことを思い出してください。 プライベート ビルド エージェントは独自のものなので、必要に応じてサインインして構成できます。

ビルド エージェントに接続する機能を使用すると、ソフトウェアをビルドするために必要なツールを使用して構成できます。 また、パイプライン構成を構築するときに問題のトラブルシューティングを行うこともできます。

  1. VM の IP アドレスを取得するには、Cloud Shell で az vm show を実行します。

    IPADDRESS=$(az vm show \
      --name MyLinuxAgent \
      --resource-group tailspin-space-game-rg \
      --show-details \
      --query [publicIps] \
      --output tsv)
    

    このコマンドは、 IPADDRESSという名前の Bash 変数に IP アドレスを格納します。

  2. VM の IP アドレスをコンソールに出力します。

    echo $IPADDRESS
    
  3. VM への SSH 接続を作成します。 $IPADDRESSの代わりに、前の手順で受信した IP アドレスを入力します。 プロンプトで、「 はい」と 入力して接続を続行します。

    ssh azureuser@$IPADDRESS
    

    これで、SSH 経由で VM に接続されました。

    このコマンドは、前に実行したときに --generate-ssh-keys オプション az vm create 指定したために機能します。 このオプションでは、SSH キー ペアが作成されます。これにより、VM にサインインできます。

VM にビルド ツールをインストールする

このセクションでは、 Space Game Web サイトの構築に必要なツールを使用して VM を構成します。

既存のビルド プロセスで次のツールが使用されていることを思い出してください。

  • アプリケーションのビルドに使用される .NET SDK
  • Node.js。ビルド タスクの実行に使用されます。
  • npm。Node.js 向けのパッケージ マネージャー
  • gulp (JavaScript ファイルと CSS ファイルの縮小に使用される Node.js パッケージ)

これらは、ビルド プロセスに必要な主要なツールです。 それらをインストールするには、GitHub からシェル スクリプトをダウンロードして実行します。

ビルド プロセスでは、node-sass などの他のツールを使用して、Sass (.scss) ファイルを CSS (.css) ファイルに変換します。 ただし、Node.js ビルドの実行時にこれらのツールがインストールされます。

まず、 apt という名前の Ubuntu パッケージ マネージャーを更新します。 このアクションは、パッケージ リポジトリから最新の情報をフェッチします。通常は、新しい Ubuntu システムを設定するときに最初に行います。

  1. SSH 接続で、apt パッケージ マネージャー キャッシュを更新します。

    sudo apt-get update
    

    sudo は、管理者またはルートの特権を使用してコマンドを実行します。

  2. GitHub から build-tools.sh という名前のシェル スクリプトをダウンロードするには、次の curl コマンドを実行します。

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-tools.sh > build-tools.sh
    
  3. スクリプトをターミナルに出力して、その内容を確認できるようにします。

    cat build-tools.sh
    

    次のような結果が表示されます。

    #!/bin/bash
    set -e
    
    # Select a default .NET version if one is not specified
    if [ -z "$DOTNET_VERSION" ]; then
      DOTNET_VERSION=6.0.300
    fi
    
    # Add the Node.js PPA so that we can install the latest version
    curl -sL https://deb.nodesource.com/setup_16.x | bash -
    
    # Install Node.js and jq
    apt-get install -y nodejs
    
    apt-get install -y jq
    
    # Install gulp
    npm install -g gulp
    
    # Change ownership of the .npm directory to the sudo (non-root) user
    chown -R $SUDO_USER ~/.npm
    
    # Install .NET as the sudo (non-root) user
    sudo -i -u $SUDO_USER bash << EOF
    curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin -c LTS -v $DOTNET_VERSION
    EOF
    

    このスクリプトは、Node.js、npm、gulp、および .NET Core をインストールします。

    DOTNET_VERSION環境変数を設定することで、インストールする .NET バージョンを指定できます。 この変数を設定しない場合、スクリプトは既存のビルド構成で使用されるバージョンをインストールします。 学習目的では、この変数は設定しません。 スクリプトで既定のバージョンを使用することを許可します。

  4. スクリプトを実行可能にしてから、スクリプトを実行します。

    chmod u+x build-tools.sh
    sudo ./build-tools.sh
    

    スクリプトの実行には数分かかります。

    実際には、コマンドを実行して、各ソフトウェア コンポーネントが正常にインストールされたことを確認できるようになりました。

VM にエージェント ソフトウェアをインストールする

次に、VM にエージェント ソフトウェアをインストールします。 このソフトウェアにより、VM はビルド エージェントとして機能し、Azure Pipelines からビルド ジョブを受け取ります。

登録プロセスは、エージェントを Azure Pipelines に登録する前に、インストールされているソフトウェアを確認します。 そのため、他のすべてのソフトウェアをインストールした後にエージェントを設定することが重要です。 実際には、追加のソフトウェアをインストールする必要がある場合は、エージェントを 2 回目に登録できます。

このドキュメントでは、 セルフホステッド Linux エージェント と macOS および Windows エージェントを手動で設定する方法について説明します。 前のセクションでビルド ツールを設定するのとほぼ同じ方法で、シェル スクリプトを実行してエージェントを構成します。

重要

ここで実行するスクリプトは学習目的です。 実際には、まず、ビルドするスクリプト内の各コマンドがシステム全体にどのように影響するかを理解する必要があります。 モジュールの最後には、オプションをより完全に説明するドキュメントを示します。

  1. GitHub から build-agent.sh という名前のシェル スクリプトをダウンロードするには、次の curl コマンドを実行します。

    curl https://raw.githubusercontent.com/MicrosoftDocs/mslearn-tailspin-spacegame-web/main/.agent-tools/build-agent.sh > build-agent.sh
    
  2. スクリプトをターミナルに出力して、その内容を確認できるようにします。

    cat build-agent.sh
    

    次のような結果が表示されます。

    #!/bin/bash
    set -e
    
    # Select a default agent version if one is not specified
    if [ -z "$AZP_AGENT_VERSION" ]; then
      AZP_AGENT_VERSION=2.187.2
    fi
    
    # Verify Azure Pipelines token is set
    if [ -z "$AZP_TOKEN" ]; then
      echo 1>&2 "error: missing AZP_TOKEN environment variable"
      exit 1
    fi
    
    # Verify Azure DevOps URL is set
    if [ -z "$AZP_URL" ]; then
      echo 1>&2 "error: missing AZP_URL environment variable"
      exit 1
    fi
    
    # If a working directory was specified, create that directory
    if [ -n "$AZP_WORK" ]; then
      mkdir -p "$AZP_WORK"
    fi
    
    # Create the Downloads directory under the user's home directory
    if [ -n "$HOME/Downloads" ]; then
      mkdir -p "$HOME/Downloads"
    fi
    
    # Download the agent package
    curl https://vstsagentpackage.azureedge.net/agent/$AZP_AGENT_VERSION/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz > $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz
    
    # Create the working directory for the agent service to run jobs under
    if [ -n "$AZP_WORK" ]; then
      mkdir -p "$AZP_WORK"
    fi
    
    # Create a working directory to extract the agent package to
    mkdir -p $HOME/azp/agent
    
    # Move to the working directory
    cd $HOME/azp/agent
    
    # Extract the agent package to the working directory
    tar zxvf $HOME/Downloads/vsts-agent-linux-x64-$AZP_AGENT_VERSION.tar.gz
    
    # Install the agent software
    ./bin/installdependencies.sh
    
    # Configure the agent as the sudo (non-root) user
    chown $SUDO_USER $HOME/azp/agent
    sudo -u $SUDO_USER ./config.sh --unattended \
      --agent "${AZP_AGENT_NAME:-$(hostname)}" \
      --url "$AZP_URL" \
      --auth PAT \
      --token "$AZP_TOKEN" \
      --pool "${AZP_POOL:-Default}" \
      --work "${AZP_WORK:-_work}" \
      --replace \
      --acceptTeeEula
    
    # Install and start the agent service
    ./svc.sh install
    ./svc.sh start
    

    各行の動作を理解する必要はありませんが、このスクリプトの概要を次に示します。

    • エージェント パッケージを .tar.gz ファイルとしてダウンロードし、その内容を抽出します。
    • 抽出されたファイルで、スクリプトは次の操作を行います。
      • installdependencies.sh という名前のシェル スクリプトを実行して、エージェント ソフトウェアをインストールします。
      • config.sh という名前 シェル スクリプトを実行して、エージェントを構成し、Azure Pipelines にエージェントを登録します。
      • svc.sh という名前 シェル スクリプトを実行して、エージェント サービスをインストールして起動します。

    このスクリプトでは、環境変数を使用して、Azure DevOps 組織に関する詳細を提供できます。 概要を次に示します:

    Bash 変数 説明 既定値
    AZP_AGENT_VERSION インストールするエージェント ソフトウェアのバージョン このモジュールをテストするために最後に使用したバージョン
    AZP_URL Azure DevOps 組織の URL (なし)
    AZP_TOKEN 個人用アクセス トークン (なし)
    AZP_AGENT_NAME Azure DevOps に表示されるエージェントの名前 システムのホスト名
    AZP_POOL エージェント プールの名前 デフォルト
    AZP_WORK ビルド タスクを実行するエージェントの作業ディレクトリ _仕事

    スクリプトが設定されていない変数の既定値を提供しない場合、スクリプトはエラー メッセージを出力してすぐに終了します。

    次の手順で、次の環境変数を設定します。

    • AZP_AGENT_VERSION
    • AZP_URL
    • AZP_TOKEN
    • AZP_AGENT_NAME
    • AZP_POOL

    現時点では、他の変数は未設定のままにすることをお勧めします。

  3. AZP_AGENT_NAME環境変数を設定して、エージェントの名前を指定します。 MyLinuxAgent をお勧めします。

    export AZP_AGENT_NAME=MyLinuxAgent
    
  4. AZP_URL環境変数を設定して、Azure DevOps 組織の URL を指定します。

    <組織>をあなたの組織に置き換えてください。 Azure DevOps を表示するブラウザー タブから名前を取得できます。

    export AZP_URL=https://dev.azure.com/organization
    
  5. 個人用アクセス トークン (このユニットで前にコピーした長いトークン値) を指定するには、 AZP_TOKEN 環境変数を設定します。

    <トークン>をトークンに置き換えます。

    export AZP_TOKEN=token
    
  6. AZP_POOL環境変数を設定して、エージェント プールの名前を指定します。 以前に、 MyAgentPool という名前のプールを作成しました。

    export AZP_POOL=MyAgentPool
    
  7. AZP_AGENT_VERSION環境変数を設定して、エージェントの最新バージョンを指定します。

    export AZP_AGENT_VERSION=$(curl -s https://api.github.com/repos/microsoft/azure-pipelines-agent/releases | jq -r '.[0].tag_name' | cut -d "v" -f 2)
    

    Linux マシン上の YAML パイプラインは、プレリリースであっても、最新バージョンのエージェントを使用している必要があります。 エージェント ソフトウェアは常に更新されるため、curlからバージョン情報をします。 このコマンドでは、 jq を使用して、返された JSON 文字列から最新バージョンを読み取ります。

  8. エージェントのバージョンをコンソールに出力します。 必要に応じて、これが最新バージョンであることを 確認 します。

    echo $AZP_AGENT_VERSION
    
  9. スクリプトを実行可能にしてから実行します。

    chmod u+x build-agent.sh
    sudo -E ./build-agent.sh
    

    sudo を使用すると、スクリプトをルート ユーザーとして実行できます。 -E引数は、スクリプトで使用できるように、設定した環境変数を含む現在の環境変数を保持します。

    スクリプトが実行されると、エージェントが Azure DevOps に接続し、エージェント プールに追加されたことを確認し、エージェント接続がテストされることを確認できます。

エージェントが稼働していることを確認する

ビルド ツールとエージェント ソフトウェアが VM に正常にインストールされました。 検証手順として、Azure DevOps に移動し、エージェント プール内のエージェントを確認します。

  1. Azure DevOps で、Space Game - web - Agent プロジェクトに移動します。

  2. [Project settings] を選択します。

  3. [パイプライン] で、[エージェント プール] を選択します。

  4. [MyAgentPool] を選択します。

  5. [ エージェント ] タブを選択します。

    エージェントがオンラインであり、ビルド ジョブを受け入れる準備ができていることを確認できます。

    プライベート エージェントの状態を示す Azure DevOps のスクリーンショット。エージェントは、オンライン、アイドル、および有効と表示されます。

    ヒント

    ビルド エージェントが オフラインと表示される場合は、しばらく待ってからページを更新してみてください。

  6. エージェント MyLinuxAgent を選択します。

  7. 機能タブ を選択します。

    セットアップ中に、構成プロセスでビルド エージェントのツール機能がスキャンされました。 npmがそのうちの 1 つとして一覧表示されていることがわかります。 元のビルド構成で、エージェントに npm をインストールする必要があることを指定したことを思い出してください。

    エージェントの機能の一部を示す Azure DevOps のスクリーンショット。npm 機能が強調表示されています。

    使用するエージェント プールを指定する場合は、これらのエントリのいずれかを demands セクションに含めることができます。 これらを含めると、アプリケーションのビルドに必要なソフトウェアを含むビルド エージェントが Azure Pipelines によって確実に選択されます。 また、さまざまなソフトウェア構成を使用してエージェント プールを作成することもできます。 Azure Pipelines では、要件に基づいて適切な構成が選択されます。