Share via


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

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

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

Container Apps Azure Pipelines 工作

工作支援下列案例:

  • 從 Dockerfile 建置並部署至容器應用程式
  • 從不含 Dockerfile 的原始程式碼建置,並部署至 Container Apps。 支援的語言包括 .NET、Java、Node.js、PHP 和 Python
  • 將現有的容器映射部署至 Container Apps

在生產版本中,此工作隨附於 Azure DevOps,且不再需要明確安裝。 如需完整的檔,請參閱 AzureContainerApps@1 - Azure Container Apps Deploy v1 工作

使用範例

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

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

下列代碼段示範如何從原始程式碼建置容器映像,並將其部署至 Container Apps。

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原始程式碼建置容器映射。

將現有的容器映射部署至 Container Apps

下列代碼段示範如何將現有的容器映射部署至 Container Apps。 工作會使用服務連線向登錄進行驗證。 如果未為登錄指派 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 進行驗證

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

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

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

組態

採取下列步驟來設定 Azure DevOps 管線以部署至 Azure Container Apps。

  • 為您的應用程式建立 Azure DevOps 存放庫
  • 建立已啟用受控識別的容器應用程式
  • AcrPull Azure Container Registry 的角色指派給容器應用程式的受控識別
  • 從 Azure DevOps Marketplace 安裝 Azure Container Apps 工作
  • 設定 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 \
      --output tsv
    

    請注意命令輸出中受控識別的主體標識碼。

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

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

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

  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 Container Apps,您必須為 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 會開始建置和部署您的容器應用程式。 若要檢查其進度,請流覽至 [管線] ,然後選取執行。 在第一次管線執行期間,系統可能會提示您授權管線使用您的服務連線。

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