共用方式為


教學課程:使用 Azure 容器應用程式作業,部署自我裝載 CI/CD 執行器和代理程式

GitHub Actions 和 Azure Pipelines 讓你能用自架運行的執行者和代理來執行 CI/CD 工作流程。 你可以透過事件驅動的 Azure 容器應用程式 工作來執行自架運行者和代理程式。

當您須執行需要存取雲端裝載執行器無法使用的本機資源或工具的工作流程時,自我裝載執行器相當實用。 例如,容器應用程式作業中的自托管跑者允許你的工作流程存取作業虛擬網路中的資源,而雲端托管跑者則無法存取這些資源。

將自托管運行器作為事件驅動的作業來運行,這可讓您充分利用 Azure Container Apps 的無伺服器特性。 作業會在觸發工作流程時自動執行,並在作業完成時結束。

您只須針對作業執行的時間付費即可。

在本教學課程中,您會了解如何將 GitHub Actions 執行器作為事件驅動容器應用程式作業執行。

  • 建立容器應用程式環境以部署自我裝載執行器
  • 建立 GitHub 存放庫以執行使用自我裝載執行器的工作流程
  • 建置會執行 GitHub Actions 執行器的容器映像
  • 將執行器作為作業部署至容器應用程式環境
  • 建立使用自我裝載執行器的工作流程,並確認其可正常執行

重要事項

自我裝載執行器僅適用於私人存放庫。 如果將其與公用存放庫搭配使用,可能會導致危險程式碼在您的自我裝載執行器上執行。 如需詳細資訊,請參閱自我裝載執行器安全性 (英文)。

附註

每個個人存取令牌 (PAT) 都有到期日。 務必在到期日前定期輪換 PAT(個人存取憑證)。 如需管理 PAT 的詳細資訊,請參閱 使用個人存取令牌

在本教學課程中,您會了解如何將 Azure Pipelines 代理程式作為事件驅動容器應用程式作業執行。

  • 建立容器應用程式環境以部署自我裝載式代理程式
  • 建立 Azure DevOps 組織與專案
  • 建置執行 Azure Pipelines 代理程式的容器映像
  • 使用手動作業,在容器應用程式環境中建立預留位置代理程式
  • 將代理程式作為作業部署至容器應用程式環境
  • 建立使用自我裝載式代理程式的管線,並確認其可正常執行

重要事項

自我裝載式代理程式僅適用於私人專案。 如果將其與公用專案搭配使用,可能會導致危險程式碼在您的自我裝載式代理程式上執行。 如需詳細資訊,請參閱自我裝載式代理程式安全性 (部分機器翻譯)。

附註

每個個人存取令牌 (PAT) 都有到期日。 務必在到期日前定期更換PATs。 如需管理 PAT 的詳細資訊,請參閱 使用個人存取令牌

附註

容器應用程式和作業不支援在容器中執行 Docker。 當您在 Container Apps 作業中的自我裝載執行器或代理程式上執行時,使用 Docker 命令的工作流程中的任何步驟都失敗。

先決條件

如需限制清單,請參閱作業限制 (部分機器翻譯)。

安裝程式

若要從 CLI 登入 Azure,請執行下列命令並遵循提示來完成驗證流程。

az login

若要確定您執行的是最新版本 CLI,請執行升級命令。

az upgrade

接下來,安裝或更新 CLI 的 Azure 容器應用程式延伸模組。

如果您在 Azure CLI 中執行 az containerapp 命令或在 PowerShell 中從 Az.App 模組執行 Cmdlet 時收到有關缺少參數的錯誤,請確定您已安裝最新版的 Azure 容器應用程式延伸模組。

az extension add --name containerapp --upgrade

附註

從 2024 年 5 月開始,Azure CLI 延伸模組預設不會再啟用預覽功能。 若要存取容器應用程式預覽功能,請使用 --allow-preview true 安裝容器應用程式延伸模組。

az extension add --name containerapp --upgrade --allow-preview true

現在已安裝目前的延伸模組或模組,請註冊 Microsoft.AppMicrosoft.OperationalInsights 命名空間。

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

建立環境變數

既然已完成您的 Azure CLI 設定,便可定義本文中使用的環境變數。

RESOURCE_GROUP="jobs-sample"
LOCATION="northcentralus"
ENVIRONMENT="env-jobs-sample"
JOB_NAME="github-actions-runner-job"
RESOURCE_GROUP="jobs-sample"
LOCATION="northcentralus"
ENVIRONMENT="env-jobs-sample"
JOB_NAME="azure-pipelines-agent-job"
PLACEHOLDER_JOB_NAME="placeholder-agent-job"

建立容器應用程式環境

由於 Azure 容器應用程式環境可作為容器應用程式和作業的安全界限,因此讓其共用相同的網路並彼此交流。

附註

若要建立與現有虛擬網路整合的容器應用程式環境,請參閱將虛擬網路提供給 Azure 容器應用程式環境 (英文)。

  1. 用以下指令建立一個資源群組。

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. 請使用以下指令建立容器應用程式環境。

    az containerapp env create \
        --name "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION"
    

建立用於執行工作流程的 GitHub 存放庫

要執行工作流程,你需要建立一個包含工作流程定義的 GitHub 倉庫。

  1. 請前往 GitHub 並登入。

  2. 輸入下列值來建立新的存放庫。

    設定
    擁有者 選取 GitHub 使用者名稱。
    儲存機制名稱 輸入存放庫名稱。
    可見性 選取 [私人]
    將此存放庫初始化的方式 選取 [新增讀我檔案]

    其他設定用預設值。

  3. 選取 [建立存放庫]

  4. 在新的存放庫中,選取 [動作]

  5. 搜尋簡單工作流程範本,然後選取 [設定]

  6. 選取 [認可變更],將工作流程新增至存放庫。

工作流程會在 ubuntu-latest GitHub 裝載執行器上執行,並將訊息列印至主控台。 稍後,您可將 GitHub 裝載執行器取代為自我裝載執行器。

取得 GitHub 個人存取權杖

若要執行自我裝載執行器,您必須在 GitHub 中建立個人存取權杖 (PAT)。 每當跑者開始時,PAT 會產生一個令牌,用來向 GitHub 註冊跑者。 GitHub Actions 執行器調整規則會使用 PAT 來監視存放庫的工作流程佇列,並視需要啟動執行器。

附註

個人存取令牌(PAT)會過期。 定期輪換代幣,保持有效並維持服務不中斷。

  1. 在 GitHub 中,選取右上角的設定檔圖片,然後選取 [設定]

  2. 選取 [開發人員設定]

  3. 在 [個人存取權杖] 下,選取 [微調權杖]

  4. 選取 [產生新的權杖]

  5. 在 [新增細部個人存取權杖] 畫面中,輸入下列值。

    設定
    權杖名稱 輸入權杖的名稱。
    到期 選取 [30 天]
    存放庫存取 選取 [僅選取存放庫],然後選取您建立的存放庫。

    針對 [存放庫權限] 輸入下列值。

    設定
    動作 選取 [唯讀]
    系統管理 選取 [讀取及寫入]
    中繼資料 選取 [唯讀]
  6. 選取 [產生權杖]

  7. 複製權杖值。

  8. 定義稍後您用來設定執行器和調整規則的變數。

    GITHUB_PAT="<GITHUB_PAT>"
    REPO_OWNER="<REPO_OWNER>"
    REPO_NAME="<REPO_NAME>"
    REGISTRATION_TOKEN_API_URL="<YOUR_REGISTRATION_TOKEN_API_URL>"
    

    以下列值取代預留位置:

    預留位置
    <GITHUB_PAT> 您所產生的 GitHub PAT。
    <REPO_OWNER> 您先前所建立存放庫的擁有者。 此值通常是您的 GitHub 使用者名稱。
    <REPO_NAME> 您先前所建立存放庫的名稱。 此值與您在 [存放庫名稱] 欄位中輸入的名稱相同。
    <YOUR_REGISTRATION_TOKEN_API_URL> entrypoint.sh 檔案中的註冊權杖 API URL。 例如,'https://myapi.example.com/get-token'

建置 GitHub Actions 執行器容器映像

若要建立自我裝載執行器,您必須建置執行執行器的容器映像。 在本節中,您會建置容器映像,並將其推送至容器登錄。

附註

您在本教學課程中建置的映像包含基本的自我裝載執行器,適合作為容器應用程式作業執行。 你可以自訂它,加入工作流程所需的其他工具或依賴項。

  1. 定義容器映像和登錄的名稱。

    CONTAINER_IMAGE_NAME="github-actions-runner:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    請將 <CONTAINER_REGISTRY_NAME> 取代為用於建立容器登錄的唯一名稱。 容器登錄名稱必須是 Azure 內的唯一名稱,且長度為 5 到 50 個字元,僅包含數字和小寫字母。

  2. 建立容器登錄庫。

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. 你的容器登錄檔必須允許 Azure 資源管理器(ARM)的受眾憑證來進行認證,才能使用管理身份拉取映像檔。

    使用下列命令來檢查是否允許 ARM 權杖來存取您的 Azure Container Registry (ACR)。

    az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
    

    如果允許 ARM 權杖,則該命令會輸出下列內容。

    {
      "status": "enabled"
    }
    

    如果 statusdisabled,請使用以下指令允許 ARM 標記。

    az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
    
  4. 用於建立執行器映像的 Dockerfile 可在 GitHub 取得。 執行以下指令來克隆倉庫,並使用 az acr build 命令在雲端建置容器映像檔。

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        --file "Dockerfile.github" \
        "https://github.com/Azure-Samples/container-apps-ci-cd-runner-tutorial.git"
    

    映像現在可在容器登錄中取得。

建立使用者指派的受控識別

為避免使用管理憑證,請使用受管理身份驗證,從 Microsoft Azure 容器登錄檔的私人倉庫拉取映像檔。 可能的話,請使用使用者指派的受控識別來提取映像。

  1. 建立使用者指派的受控識別。 執行下列命令之前,請為您的受控識別選擇一個名稱,並將 \<PLACEHOLDER\> 取代為該名稱。

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. 取得身分識別的資源識別碼。

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

將自我裝載執行器部署為作業

您現在可以建立使用容器映像的作業。 在本節中,您會建立作業,以使用您先前產生的 PAT 來執行自我裝載執行器,並使用 GitHub 進行驗證。 此作業會使用 github-runner 調整規則,根據擱置的工作流程執行數目來建立作業執行。

  1. 在容器應用程式環境中建立作業。

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type Event \
        --replica-timeout 1800 \
        --replica-retry-limit 0 \
        --replica-completion-count 1 \
        --parallelism 1 \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --min-executions 0 \
        --max-executions 10 \
        --polling-interval 30 \
        --scale-rule-name "github-runner" \
        --scale-rule-type "github-runner" \
        --scale-rule-metadata "githubAPIURL=https://api.github.com" "owner=$REPO_OWNER" "runnerScope=repo" "repos=$REPO_NAME" "targetWorkflowQueueLength=1" \
        --scale-rule-auth "personalAccessToken=personal-access-token" \
        --cpu "2.0" \
        --memory "4Gi" \
        --secrets "personal-access-token=$GITHUB_PAT" \
        --env-vars "GITHUB_PAT=secretref:personal-access-token" "GH_URL=https://github.com/$REPO_OWNER/$REPO_NAME" "REGISTRATION_TOKEN_API_URL=https://api.github.com/repos/$REPO_OWNER/$REPO_NAME/actions/runners/registration-token" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --mi-user-assigned "$IDENTITY_ID" \
        --registry-identity "$IDENTITY_ID"
    

    下表描述命令中使用的重要參數。

    參數 描述
    --replica-timeout 複本的執行持續時間上限。
    --replica-retry-limit 重試失敗複本的次數。
    --replica-completion-count 在作業執行被視為成功之前,必須有一定數量的複本成功完成。
    --parallelism 每個作業執行要啟動的複本數目。
    --min-executions 每個輪詢間隔要執行的作業執行數目下限。
    --max-executions 每個輪詢間隔要執行的作業執行數目上限。
    --polling-interval 評估調整規則的輪詢間隔。
    --scale-rule-name 調整規則的名稱。
    --scale-rule-type 要使用的調整規則類型。 若要深入了解 GitHub 執行器調整工具,請參閱 KEDA 文件 (英文)。
    --scale-rule-metadata 調整規則的中繼資料。 如果您使用的是 GitHub Enterprise,請使用其 API URL 更新 githubAPIURL
    --scale-rule-auth 調整規則的驗證。
    --secrets 要用於作業的秘密。
    --env-vars 要用於作業的環境變數。
    --registry-server 要用於作業的容器登錄伺服器。 若為 Azure Container Registry,命令會自動設定驗證。
    --mi-user-assigned 要指派給作業之使用者指派受控識別的資源識別碼。
    --registry-identity 用於向登錄伺服器進行驗證的受控識別的資源識別碼,而不是使用使用者名稱和密碼。 可能的話,系統會自動為身分識別建立 'acrpull' 角色指派。

    調整規則設定會定義要監視的事件來源。 規則會在每個輪詢間隔進行評估,以判斷要觸發的作業執行數目。 欲了解更多資訊,請參閱 Set 縮放規則

系統現在會在容器應用程式環境中建立事件驅動作業。

執行工作流程並確認作業

作業設定為每隔 30 秒評估一次調整規則。 在每次評估期間,其會檢查需要自我裝載執行器的擱置工作流程執行數目,並為每個擱置工作流程啟動新的作業執行,最多可設定 10 次執行。

要驗證工作設定,修改工作流程以使用自架運行者並觸發工作流程執行。 然後,您可以檢視作業執行記錄,以查看工作流程執行情況。

  1. 在 GitHub 倉庫裡,回到你之前產生的工作流程。 這是 .github/workflows 目錄中的 YAML 檔案。

  2. 選取 [Edit in place] \(就地編輯\)

  3. runs-on 屬性更新為 self-hosted

    runs-on: self-hosted
    
  4. 選取 [認可變更]

  5. 選取 [認可變更]

  6. 前往 行動 標籤。

    新的工作流程現已排入佇列。 30 秒內,工作執行開始,工作流程隨即完成。

    等候動作完成,再繼續執行下一個步驟。

  7. 列出作業的執行,以確認作業執行已建立並順利完成。

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    

建立 Azure DevOps 專案和存放庫

要執行管線,你需要一個 Azure DevOps 專案和代碼庫。

  1. 進入 Azure DevOps 並登入你的帳號。

  2. 選取現有組織或建立新組織。

  3. 在組織概觀頁面中,選取 [新增專案],然後輸入下列值。

    設定
    專案名稱 輸入專案的名稱。
    可見性 選取 [私人]
  4. 選取 [建立]

  5. 在左側導覽中,選取 [Repos]

  6. 在 [Initialize main branch with a README or .gitignore] \(使用讀我檔案或 .gitignore 將主分支初始化\) 下,選取 [新增讀我檔案]

  7. 其他設定保留預設值,並選擇 初始化

建立新的代理程式集區

建立新的代理程式集區,以執行自我裝載執行器。

  1. 在您的 Azure DevOps 專案中,展開左側導覽列,然後選取 [專案設定]

    Azure DevOps 專案設定按鈕的螢幕擷取畫面。

  2. 在 [專案設定] 導覽功能表的 [Pipelines] 區段底下,選取 [代理程式集區]

    Azure DevOps 代理程式集區按鈕的螢幕擷取畫面。

  3. 選取 [新增集區],並輸入下列值。

    設定
    要連結的集區 選取 [ 新增]。
    集區類型 選取 [自我裝載]
    名稱 輸入 container-apps
    授與所有管線的存取權限 選取此核取方塊。
  4. 選取 [建立]

取得 Azure DevOps 個人存取權杖

若要執行自我裝載執行器,您必須在 Azure DevOps 中建立個人存取權杖 (PAT)。 用 PAT 來用 Azure DevOps 認證跑者。 調整規則也會使用權杖來檢查擱置管線執行的數目,並觸發新的作業執行。

附註

個人存取令牌(PAT)會過期。 定期輪換代幣,保持有效並維持服務不中斷。

  1. 在 Azure DevOps 中,選取右上角設定檔圖片旁的 [使用者設定]

  2. 選取 [個人存取權杖]

  3. 在 [個人存取權杖] 頁面中,選取 [新增權杖],並輸入下列值。

    設定
    名稱 輸入權杖的名稱。
    組織 選取您先前選擇或建立的組織。
    範圍 選取 [Custom defined] \(已定義自訂\)
    顯示所有範圍 選取 [顯示所有範圍]
    代理程式集區 (讀取與管理) 選取 [代理程式集區 (讀取與管理)]

    所有其他範圍都保留為未選取。

  4. 選取 [建立]

  5. 將權杖值複製到安全位置。

    離開此頁面之後,即無法擷取權杖。

  6. 定義你之後用來配置容器應用程式工作所需的變數。

    AZP_TOKEN="<AZP_TOKEN>"
    ORGANIZATION_URL="<ORGANIZATION_URL>"
    AZP_POOL="container-apps"
    

    以下列值取代預留位置:

    預留位置 註解
    <AZP_TOKEN> 您所產生的 Azure DevOps PAT。
    <ORGANIZATION_URL> 您的 Azure DevOps 組織 URL。 請確認 URL 結尾沒有後置 / 例如,https://dev.azure.com/myorghttps://myorg.visualstudio.com

建置 Azure Pipelines 代理程式容器映像

若要建立自我裝載式代理程式,您必須建置執行代理程式的容器映像。 在本節中,您會建置容器映像,並將其推送至容器登錄。

附註

您在本教學課程中建置的映像包含基本的自我裝載式代理程式,適合作為容器應用程式作業執行。 你可以自訂它,加入管線所需的其他工具或相依關係。

重要事項

如果您的管線建置的是 .NET Framework 應用程式,您可能需要在容器映像中包含 Mono。 範例 Dockerfile 包含 .NET SDK,但不含 Mono。 考慮使用基於 Windows 的容器,或在需要時加入 Mono 依賴項。

  1. 返回終端,定義容器映像和登錄的名稱。

    CONTAINER_IMAGE_NAME="azure-pipelines-agent:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    請將 <CONTAINER_REGISTRY_NAME> 取代為用於建立容器登錄的唯一名稱。

    容器登錄名稱必須是 Azure 內的唯一名稱,且長度為 5 到 50 個字元,僅包含數字和小寫字母。

  2. 建立容器登錄庫。

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. 用於建立執行器映像的 Dockerfile 可在 GitHub 取得。 執行以下指令,透過 az acr build 指令在雲端複製儲存庫並建立容器映像檔。

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        --file "Dockerfile.azure-pipelines" \
        "https://github.com/Azure-Samples/container-apps-ci-cd-runner-tutorial.git"
    

    映像現在可在容器登錄中取得。

建立預留位置自我裝載式代理程式

您必須先建立預留位置代理程式,才能在新代理程式集區中執行自我裝載式代理程式。 預留位置代理程式確保代理程式集區可供使用。 若沒有預留位置代理程式,使用代理程式集區的管線會失敗。

您可以執行手動作業來註冊離線預留位置代理程式。 工作執行一次後,你可以刪除它。 預留位置代理程式不會取用 Azure 容器應用程式或 Azure DevOps 中的任何資源。

  1. 在容器應用程式環境中建立手動作業,以建立預留位置代理程式。

    az containerapp job create -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
        --trigger-type Manual \
        --replica-timeout 300 \
        --replica-retry-limit 0 \
        --replica-completion-count 1 \
        --parallelism 1 \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "2.0" \
        --memory "4Gi" \
        --secrets "personal-access-token=$AZP_TOKEN" "organization-url=$ORGANIZATION_URL" \
        --env-vars "AZP_TOKEN=secretref:personal-access-token" "AZP_URL=secretref:organization-url" "AZP_POOL=$AZP_POOL" "AZP_PLACEHOLDER=1" "AZP_AGENT_NAME=placeholder-agent" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io"
    

    下表描述命令中使用的重要參數。

    參數 描述
    --replica-timeout 複本的執行持續時間上限。
    --replica-retry-limit 重試失敗複本的次數。
    --replica-completion-count 在將作業的執行視為成功前,必須成功完成的複本數目。
    --parallelism 每個作業執行要啟動的複本數目。
    --secrets 要用於作業的秘密。
    --env-vars 要用於作業的環境變數。
    --registry-server 要用於作業的容器登錄伺服器。 若為 Azure Container Registry,命令會自動設定驗證。

    設定 AZP_PLACEHOLDER 環境變數,可設定代理程式容器註冊為離線預留位置代理程式,而無須執行作業。

  2. 執行手動作業以建立預留位置代理程式。

    az containerapp job start -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP"
    
  3. 列出作業的執行,以確認作業執行已建立並順利完成。

    az containerapp job execution list \
        --name "$PLACEHOLDER_JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    
  4. 確認已在 Azure DevOps 中建立預留位置代理程式。

    1. 在 Azure DevOps 中,前往您的專案。
    2. 選取 [專案設定]> [代理程式集區]> [container-apps]> [代理程式]
    3. 確認已列出名為 placeholder-agent 的預留位置代理程式,且其狀態為離線。
  5. 你不需要再做那份工作了。 您可以刪除它。

    az containerapp job delete -n "$PLACEHOLDER_JOB_NAME" -g "$RESOURCE_GROUP"
    

建立自我裝載式代理程式作為事件驅動作業

在您建立預留位置代理程式後,則可以建立自我裝載式代理程式。 在本節中,您會建立事件驅動作業,以在觸發管線時執行自我裝載式代理程式。

重要事項

確保您的 Azure DevOps 組織網址正確且可存取。 KEDA Azure 管線擴展器需要適當的認證與網路連線來監控管線佇列。

az containerapp job create -n "$JOB_NAME" -g "$RESOURCE_GROUP" --environment "$ENVIRONMENT" \
    --trigger-type Event \
    --replica-timeout 1800 \
    --replica-retry-limit 0 \
    --replica-completion-count 1 \
    --parallelism 1 \
    --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
    --min-executions 0 \
    --max-executions 10 \
    --polling-interval 30 \
    --scale-rule-name "azure-pipelines" \
    --scale-rule-type "azure-pipelines" \
    --scale-rule-metadata "poolName=$AZP_POOL" "targetPipelinesQueueLength=1" \
    --scale-rule-auth "personalAccessToken=personal-access-token" "organizationURL=organization-url" \
    --cpu "2.0" \
    --memory "4Gi" \
    --secrets "personal-access-token=$AZP_TOKEN" "organization-url=$ORGANIZATION_URL" \
    --env-vars "AZP_TOKEN=secretref:personal-access-token" "AZP_URL=secretref:organization-url" "AZP_POOL=$AZP_POOL" \
    --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io"

下表描述命令中使用的調整規則參數。

參數 描述
--min-executions 每個輪詢間隔要執行的作業執行數目下限。
--max-executions 每個輪詢間隔要執行的作業執行數目上限。
--polling-interval 評估調整規則的輪詢間隔。
--scale-rule-name 調整規則的名稱。
--scale-rule-type 要使用的調整規則類型。 若要深入了解 Azure Pipelines 調整工具,請參閱 KEDA 文件 (英文)。
--scale-rule-metadata 調整規則的中繼資料。
--scale-rule-auth 調整規則的驗證。

調整規則設定會定義要監視的事件來源。 規則會在每個輪詢間隔進行評估,以判斷要觸發的作業執行數目。 欲了解更多資訊,請參閱 Set 縮放規則

系統現在會在容器應用程式環境中建立事件驅動作業。

執行管線並確認作業

在您設定自我裝載式代理程式後,執行管線以確認其正常運作。

  1. 在 Azure DevOps 專案的左側導覽中,前往 Pipelines

  2. 選取 [建立準銷售案源]

  3. 選取 [Azure Repos Git] 作為程式碼的位置。

  4. 選取您先前建立的存放庫。

  5. 選取 [入門管線]

  6. 在管線 YAML 中,將 poolvmImage: ubuntu-latest 變更為 name: container-apps

    pool:
      name: container-apps
    
  7. 選取 [儲存並執行]

    管線會執行並使用您在容器應用程式環境中建立的自我裝載式代理程式作業。

  8. 列出作業的執行,以確認作業執行已建立並順利完成。

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table \
        --query '[].{Status: properties.status, Name: name, StartTime: properties.startTime}'
    

故障排除

如果你在自架客服時遇到問題,請嘗試以下故障排除步驟。

管線作業會持續排入佇列,且不會觸發容器應用程式的作業

如果你的管線仍處於排隊狀態且無法觸發工作執行,請嘗試以下步驟:

  1. 請確認比例規則的配置。 請確認擴展規則的元資料是否符合你的 Azure DevOps 設定。

    az containerapp job show \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --query "properties.configuration.eventTriggerConfig.scale.rules[0]"
    
  2. 請確保您的個人存取權杖擁有正確的權限且未過期。

  3. 容器應用程式環境必須能存取你的 Azure DevOps 組織 URL,因此請確認你環境中的網路連線。

  4. 查看投票間隔。 預設的輪詢間隔為 30 秒。 如果需要可以增加,但這個改動可能會延遲工作執行。

  5. 檢查工作執行日誌中是否有錯誤訊息。

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output table
    

容器映像中遺漏依賴

如果你在建置 .NET Framework 應用程式時遇到像是「無法找到可執行檔:'mono'」這類錯誤:

  1. 使用適當的底圖。 確保你的容器映像包含建置過程中所有必要的相依關係。

  2. 如果你需要在 Linux 上建立 .NET Framework 應用程式,請用以下指令將 Mono 加入你的容器映像檔:

    # Add to your Dockerfile
    RUN apt-get update && apt-get install -y mono-complete
    
  3. 考慮 Windows 容器。 對於 .NET Framework 應用程式,建議考慮使用 Windows 架構的容器映像檔,而非 Linux。

  4. 版本請使用 .NET Core/5+。 現代的 .NET 版本不需要 Mono,且在 Linux 容器上運作得更好。

代理人註冊問題

若代理未向 Azure DevOps 註冊:

  1. 檢查代幣權限。 確保 PAT 擁有「代理池(讀取與管理)」權限。

  2. 請確認組織網址。 請確認組織網址正確且沒有斜線。

  3. 檢查代理程式集區名稱。 確認代理池名稱是否完全符合 Azure DevOps 與你的工作設定。

秘訣

有問題嗎? 在 Azure 容器應用程式存放庫中提出問題,讓我們在 GitHub 上了解該問題。

清除資源

完成後,執行以下指令刪除包含你容器應用程式資源的資源群組。

注意

下列命令會刪除指定的資源群組和其中包含的所有資源。 如果資源群組包含本教學範圍外的資源,指令也會刪除這些資源。

az group delete \
    --resource-group $RESOURCE_GROUP

若要刪除 GitHub 存放庫,請參閱刪除存放庫 (英文)。

後續步驟