從 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
角色,請使用 acrUsername
和 acrPassword
輸入參數提供登錄的管理員認證。
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
角色,請使用 acrUsername
和 acrPassword
提供登錄的管理員認證。
為了提取映像,Azure 容器應用程式會使用受控識別 (建議) 或管理員認證,向 Azure Container Registry 進行驗證。 若要使用受控識別,工作的目標容器應用程式必須設定為使用受控識別。 若要使用登錄的管理員認證進行驗證,請設定工作的 acrUsername
和 acrPassword
輸入。
組態
請採取下列步驟來設定 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 存放庫並複製原始程式碼
建立管線之前,您應用程式的原始程式碼必須位於存放庫中。
登入 Azure DevOps,然後導覽至您的專案。
開啟 [Repos] 頁面。
在頂端導覽列中,選取存放庫下拉式清單,然後選取 [匯入存放庫]。
輸入下列資訊並選取 [匯入]:
欄位 值 存放庫類型 Git 複製 URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
名稱 my-container-app
選取 [複製] 以檢視存放庫 URL 並加以複製。
開啟終端機,並執行下列命令:
git clone <REPOSITORY_URL> my-container-app
將
<REPOSITORY_URL>
取代為您複製的 URL。
建立容器應用程式並設定受控識別
使用 az containerapp up
命令搭配下列步驟來建立容器應用程式。 此命令會建立 Azure 資源、建置容器映像、將映像儲存在登錄中,以及部署至容器應用程式。
在建立應用程式之後,您可以將受控識別新增至您的應用程式,並將身分識別指派給 AcrPull
角色,以允許身分識別從登錄中提取映像。
變更為所複製存放庫的 src 資料夾。
cd my-container-app cd src
使用
az containerapp up
命令建立 Azure 資源並部署容器應用程式。az containerapp up \ --name my-container-app \ --source . \ --ingress external
在命令輸出中,記下 Azure Container Registry 的名稱。
取得容器登錄的完整資源識別碼。
az acr show --name <ACR_NAME> --query id --output tsv
以您的登錄名稱取代
<ACR_NAME>
。啟用容器應用程式的受控識別。
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned
請記下命令輸出中受控識別的主體識別碼。
將 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 的資源識別碼。將容器應用程式設定為使用受控識別,從 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 服務連線。
在 Azure DevOps 中,選取專案設定。
選取 [服務連線]。
選取 [新增服務連線]。
選取 [Azure Resource Manager]。
選取 [服務主體 (自動)],然後選取 [下一步]。
輸入下列資訊並選取 [儲存]:
欄位 值 訂用帳戶 選取 Azure 訂閱。 資源群組 選取資源群組 ( my-container-app-rg
),其中包含您的容器應用程式和容器登錄。服務連線名稱 my-subscription-service-connection
若要深入了解服務連線,請參閱連線至 Microsoft Azure。
建立 Azure DevOps YAML 管線
在 Azure DevOps 專案中,選取 [管線]。
選取 [新增管線]。
選取 [Azure Repos Git]。
選取包含原始程式碼 (
my-container-app
) 的存放庫。選取 [入門管線]。
在編輯器中,將檔案的內容取代為下列 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 的名稱。選取儲存並執行。
Azure Pipelines 執行即會開始建置並部署您的容器應用程式。 若要檢查其進度,請瀏覽至 [管線],然後選取執行。 在第一次管線執行期間,系統可能會提示您授權管線使用您的服務連線。
若要部署應用程式的新修訂,請將新的認可推送至主分支。