分享方式:


從 Azure Pipelines 部署至 Azure 容器應用程式

Azure 容器應用程式可讓您使用 Azure Pipelines 將修訂發佈至您的容器應用程式。 當認可推送至您的 Azure DevOps 存放庫時,管線就會觸發,以更新容器登錄中的容器映像。 「Azure 容器應用程式」會根據更新的容器映像來建立新的修訂版。

管線會透過提交到存放庫中的特定分支來觸發。 建立管線時,您可決定哪個分支是觸發程序。

容器應用程式 Azure Pipelines 工作

此工作支援下列案例:

  • 從 Dockerfile 建置並部署至容器應用程式
  • 在沒有 Dockerfile 的情況下從原始程式碼建置,並部署至容器應用程式。 支援的語言包括 .NET、JAVA、Node.js、PHP 和 Python
  • 將現有的容器映像部署至容器應用程式

在生產版本中,此工作隨 Azure DevOps 一起提供,不再需要明確安裝。 如需完整文件,請參閱 AzureContainerApps@1 - Azure 容器應用程式部署 v1 工作

使用範例

以下是使用工作的一些常見案例。 如需詳細資訊,請參閱工作的文件

建置並部署至容器應用程式

下列程式碼片段說明如何從原始程式碼建置容器映像,並將其部署至容器應用程式。

steps:
- task: AzureContainerApps@1
  inputs:
    appSourcePath: '$(Build.SourcesDirectory)/src'
    azureSubscription: 'my-subscription-service-connection'
    acrName: 'myregistry'
    containerAppName: 'my-container-app'
    resourceGroup: 'my-container-app-rg'

此工作會使用 appSourcePath 中的 Dockerfile 來建置容器映像。 如果找不到 Dockerfile,工作會嘗試從 appSourcePath 中的原始程式碼建置容器映像。

將現有的容器映像部署至容器應用程式

下列程式碼片段說明如何將現有的容器映像部署至容器應用程式。 工作會使用服務連線向登錄進行驗證。 如果服務連線身分識別未指派登錄的 AcrPush 角色,請使用 acrUsernameacrPassword 輸入參數提供登錄的管理員認證。

steps:
  - task: AzureContainerApps@1
    inputs:
      azureSubscription: 'my-subscription-service-connection'
      containerAppName: 'my-container-app'
      resourceGroup: 'my-container-app-rg'
      imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'

重要

如果您要在個別步驟中建置容器映射,請確定您使用唯一的標籤,例如組建識別碼,而不是穩定標籤,例如 latest。 如需詳細資訊,請參閱映像標籤最佳做法

向 Azure Container Registry 進行驗證 | Microsoft Docs

Azure 容器應用程式工作需要向您的 Azure Container Registry 進行驗證,才能推送容器映像。 容器應用程式也需要向您的 Azure Container Registry 進行驗證,才能提取容器映像。

若要推送映射,工作會使用 azureSubscription 中所提供的服務連線,自動向 acrName 中指定的容器登錄進行驗證。 如果服務連線身分識別未指派登錄的 AcrPush 角色,請使用 acrUsernameacrPassword 提供登錄的管理員認證。

為了提取映像,Azure 容器應用程式會使用受控識別 (建議) 或管理員認證,向 Azure Container Registry 進行驗證。 若要使用受控識別,工作的目標容器應用程式必須設定為使用受控識別。 若要使用登錄的管理員認證進行驗證,請設定工作的 acrUsernameacrPassword 輸入。

組態

請採取下列步驟來設定 Azure DevOps 管線,以部署至 Azure 容器應用程式。

  • 為您的應用程式建立 Azure DevOps 存放庫
  • 建立已啟用受控識別的容器應用程式
  • 將 Azure Container Registry 的 AcrPull 角色指派給容器應用程式的受控識別
  • 從 Azure DevOps Marketplace 安裝 Azure 容器應用程式工作
  • 為您的 Azure 訂用帳戶設定 Azure DevOps 服務連線
  • 建立 Azure DevOps 管線

必要條件

需求 指示
Azure 帳戶 如果您沒有帳戶,可免費建立帳戶。 您需要 Azure 訂用帳戶的「參與者」或「擁有者」權限才能繼續。 如需詳細資料,請參閱使用 Azure 入口網站指派 Azure 角色
Azure DevOps 專案 移至 Azure DevOps,並選取 [免費開始]。 然後,建立新的專案。
Azure CLI 安裝 Azure CLI

建立 Azure DevOps 存放庫並複製原始程式碼

建立管線之前,您應用程式的原始程式碼必須位於存放庫中。

  1. 登入 Azure DevOps,然後導覽至您的專案。

  2. 開啟 [Repos] 頁面。

  3. 在頂端導覽列中,選取存放庫下拉式清單,然後選取 [匯入存放庫]

  4. 輸入下列資訊並選取 [匯入]

    欄位
    存放庫類型 Git
    複製 URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
    名稱 my-container-app
  5. 選取 [複製] 以檢視存放庫 URL 並加以複製。

  6. 開啟終端機並執行下列命令,以複製存放庫:

    git clone <REPOSITORY_URL> my-container-app
    

    <REPOSITORY_URL> 取代為您複製的 URL。

建立容器應用程式並設定受控識別

使用 az containerapp up 命令搭配下列步驟來建立容器應用程式。 此命令會建立 Azure 資源、建置容器映像、將映像儲存在登錄中,以及部署至容器應用程式。

在建立應用程式之後,您可以將受控識別新增至您的應用程式,並將身分識別指派給 AcrPull 角色,以允許身分識別從登錄中提取映像。

  1. 變更為所複製存放庫的 src 資料夾。

    cd my-container-app
    cd src
    
  2. 使用 az containerapp up 命令建立 Azure 資源並部署容器應用程式。

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. 在命令輸出中,記下 Azure Container Registry 的名稱。

  4. 取得容器登錄的完整資源識別碼。

    az acr show --name <ACR_NAME> --query id --output tsv
    

    以您的登錄名稱取代 <ACR_NAME>

  5. 啟用容器應用程式的受控識別。

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    請記下命令輸出中受控識別的主體識別碼。

  6. 將 Azure Container Registry 的 AcrPull 角色指派給容器應用程式的受控識別。

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    <MANAGED_IDENTITY_PRINCIPAL_ID> 取代為受控識別的主體識別碼,以及將 <ACR_RESOURCE_ID> 取代為 Azure Container Registry 的資源識別碼。

  7. 將容器應用程式設定為使用受控識別,從 Azure Container Registry 提取映像。

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    <ACR_NAME> 取代為您 Azure Container Registry 的名稱。

建立 Azure DevOps 服務連線

若要部署至 Azure 容器應用程式,您必須為 Azure 訂用帳戶建立 Azure DevOps 服務連線。

  1. 在 Azure DevOps 中,選取專案設定

  2. 選取 [服務連線]

  3. 選取 [新增服務連線]

  4. 選取 [Azure Resource Manager]

  5. 選取 [服務主體 (自動)],然後選取 [下一步]

  6. 輸入下列資訊並選取 [儲存]

    欄位
    訂用帳戶 選取 Azure 訂閱。
    資源群組 選取資源群組 (my-container-app-rg),其中包含您的容器應用程式和容器登錄。
    服務連線名稱 my-subscription-service-connection

若要深入了解服務連線,請參閱連線至 Microsoft Azure

建立 Azure DevOps YAML 管線

  1. 在 Azure DevOps 專案中,選取 [管線]

  2. 選取 [新增管線]

  3. 選取 [Azure Repos Git]

  4. 選取包含原始程式碼 (my-container-app) 的存放庫。

  5. 選取 [入門管線]。

  6. 在編輯器中,將檔案的內容取代為下列 YAML:

    trigger:
      branches:
        include:
          - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
      - task: AzureContainerApps@1
        inputs:
          appSourcePath: '$(Build.SourcesDirectory)/src'
          azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>'
          acrName: '<ACR_NAME>'
          containerAppName: 'my-container-app'
          resourceGroup: 'my-container-app-rg'
    

    <AZURE_SUBSCRIPTION_SERVICE_CONNECTION> 取代為您在上一個步驟中建立的 Azure DevOps 服務連線名稱 (my-subscription-service-connection),並將 <ACR_NAME> 取代為 Azure Container Registry 的名稱。

  7. 選取儲存並執行

Azure Pipelines 執行即會開始建置並部署您的容器應用程式。 若要檢查其進度,請瀏覽至 [管線],然後選取執行。 在第一次管線執行期間,系統可能會提示您授權管線使用您的服務連線。

若要部署應用程式的新修訂,請將新的認可推送至分支。