從 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
服務連線的身分識別角色,請使用 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 進行驗證
Azure Container Apps 工作必須向 Azure Container Registry 進行驗證,才能推送容器映像。 容器應用程式也需要向 Azure Container Registry 進行驗證,才能提取容器映像。
若要推送映像,工作會自動使用 中azureSubscription
所提供的服務連線,向中指定的acrName
容器登錄進行驗證。 如果未為登錄指派AcrPush
服務連線的身分識別角色,請使用 和 acrPassword
提供登錄的管理員認證acrUsername
。
若要提取映像,Azure Container Apps 會使用受控識別(建議)或系統管理員認證向 Azure Container Registry 進行驗證。 若要使用受控識別,工作的目標容器應用程式必須 設定為使用受控識別。 若要使用登錄的系統管理員認證進行驗證,請設定工作的 acrUsername
和 acrPassword
輸入。
組態
採取下列步驟來設定 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 存放庫並複製原始程式碼
建立管線之前,應用程式的原始程式碼必須位於存放庫中。
登入 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 \ --output tsv
請注意命令輸出中受控識別的主體標識碼。
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>
。將容器應用程式設定為使用受控識別從 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 服務連線。
在 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 會開始建置和部署您的容器應用程式。 若要檢查其進度,請流覽至 [管線] ,然後選取執行。 在第一次管線執行期間,系統可能會提示您授權管線使用您的服務連線。
若要部署應用程式的新修訂,請將新的認可推送至 main 分支。