用來建置及部署 Azure Container Apps 的 Azure DevOps 工作。
語法
# Azure Container Apps Deploy v1
# An Azure DevOps Task to build and deploy Azure Container Apps.
- task: AzureContainerApps@1
inputs:
# advanced
#workingDirectory: # string. Alias: cwd. Working Directory.
#appSourcePath: # string. Application source path.
azureSubscription: # string. Alias: connectedServiceNameARM. Required. Azure Resource Manager connection.
#acrName: # string. Azure Container Registry name.
#acrUsername: # string. Azure Container Registry username.
#acrPassword: # string. Azure Container Registry password.
#dockerfilePath: # string. Dockerfile path.
#imageToBuild: # string. Docker image to build.
#imageToDeploy: # string. Docker image to deploy.
#containerAppName: # string. Azure Container App name.
#resourceGroup: # string. Azure resource group name.
#containerAppEnvironment: # string. Azure Container App environment.
#runtimeStack: # string. Application runtime stack.
#targetPort: # string. Application target port.
#location: # string. Location of the Container App.
#environmentVariables: # string. Environment variables.
#ingress: # string. Ingress setting.
#yamlConfigPath: # string. YAML configuration file path.
#disableTelemetry: # boolean. Disable telemetry.
輸入
workingDirectory
-
工作目錄
輸入別名: cwd。
string。
執行文稿的目前工作目錄。 空白是存放庫 (build) 或成品 (release) 的根目錄,也就是 $(System.DefaultWorkingDirectory)。
appSourcePath
-
應用程式來源路徑
string。
要建置之原始程式碼執行器的絕對路徑。 如果未提供,則必須提供 'imageToDeploy' 自變數,以確保容器應用程式具有要參考的映射。
將新映射推送至 ACR 時,需要 acrName 和 appSourcePath 工作輸入。
azureSubscription
-
Azure Resource Manager 連線
輸入別名: connectedServiceNameARM。
string。 必填。
指定部署的 Azure Resource Manager 服務連線。 此服務連線必須連結到將建立/更新容器應用程式的 Azure 訂用帳戶。 此服務連線 必須 有適當的許可權,才能在訂用帳戶內進行這些變更,例如參與者角色。
acrName
-
Azure Container Registry 名稱
string。
將推送可執行應用程式映像的 Azure Container Registry 名稱。
將新映射推送至 ACR 時,需要 acrName 和 appSourcePath 工作輸入。
acrUsername
-
Azure Container Registry 用戶名稱
string。
用來向提供的 Azure Contrainer Registry 驗證推播要求的用戶名稱。 如果未提供,則會透過 『az acr login』 產生存取令牌,並提供給 『docker login』 來驗證要求。
acrPassword
-
Azure Container Registry 密碼
string。
用來向提供的 Azure Contrainer Registry 驗證推播要求的密碼。 如果未提供,則會透過 『az acr login』 產生存取令牌,並提供給 『docker login』 來驗證要求。
dockerfilePath
-
Dockerfile 路徑
string。
相對路徑(_without檔案前置詞(請參閱下列 範例)至所提供應用程式來源中的 Dockerfile,該來源應該用來建置映像,然後推送至 ACR 並部署至容器應用程式。 如果未提供,此工作會檢查所提供應用程式來源的根目錄中是否有名為 『Dockerfile』 的檔案,並使用該檔案來建置映像。 否則,Oryx++ Builder 會用來建立映像。
imageToBuild
-
Docker 映射以建置
string。
要建置的映像自定義名稱,推送至 ACR,並透過這項工作部署到容器應用程式。 注意:此映射名稱應包含 ACR 伺服器;例如,<acr-name>.azurecr.io/<repo>:<tag>。 如果未提供此自變數,則會以 <acr-name>.azurecr.io/ado-task/container-app:<build-id>.<build-number>的形式建構預設映射名稱。
imageToDeploy
-
Docker 映射以部署
string。
已推送至 ACR 的映像名稱,並會由這項工作部署至容器應用程式。 注意:映射名稱應包含 ACR 伺服器;例如,<acr-name>.azurecr.io/<repo>:<tag>。 如果未提供此自變數,則會使用 'imageToBuild' 自變數所提供的值(或決定)。 如果在需要驗證才能提取的 ACR 實例中找到此映像,則可以提供 acrName 自變數或 acrUsername 和 acrPassword 自變數,以驗證 ACR 實例的要求。
containerAppName
-
Azure Container App 名稱
string。
將建立或更新的 Azure 容器應用程式名稱。 如果未提供,這個值會以 ado-task-app-<build-id>-<build-number>的形式表示。
resourceGroup
-
Azure 資源組名
string。
Azure 容器應用程式將建立的現有資源群組(或目前存在於 中)。 如果未提供,這個值會以 <container-app-name>-rg的形式表示。
containerAppEnvironment
-
Azure 容器應用環境
string。
要與應用程式搭配使用的 Azure Container App 環境名稱。 如果未提供,則會使用容器應用程式資源群組中的現有環境,否則會以 <container-app-name>-env格式建立環境。
runtimeStack
-
應用程式運行時間堆疊
string。
部署至容器應用程式的最終可執行應用程式映像中使用的平臺版本堆疊。 應該在形成 <platform>:<version>中提供值。 如果未提供,則此值是由 Oryx 根據所提供應用程式的內容來決定。 如需 Oryx 支援的運行時間堆疊詳細資訊,請參閱本檔 。
targetPort
-
應用程式目標埠
string。
容器應用程式將接聽的目標埠。 如果未提供,則所有其他支持平臺的此值將會是 Python 應用程式的 「80」 和 「8080」。
容器應用程式的 location - 位置
string。
容器應用程式(和其他已建立的資源)將部署至的位置。
environmentVariables
-
環境變數
string。
容器的環境變數清單。 以 『key=value』 格式分隔的空間值。 空字串可清除現有的值。 使用 'secretref:' 作為參考秘密的前置詞值。
ingress
-
輸入設定
string。
可能的選項:外部、內部、已停用。 如果設定為 external (如果建立容器應用程式時未提供預設值),容器應用程式將會視設定的應用程式環境端點而定,從因特網或 VNET 顯示。 如果設定為 internal,則只會在應用程式環境中看見容器應用程式。 如果設定為 disabled,此容器應用程式的輸入將會停用,而且不會有 HTTP 或 TCP 端點。
yamlConfigPath
-
YAML 組態檔路徑
string。
完整路徑(在執行中的 Azure Pipelines 代理程式上)到 YAML 檔案,詳細說明容器應用程式的組態。
YAML 組態檔中的 resourceGroup 屬性 將不會 使用;此值來自提供給工作的 resourceGroup 自變數,或工作所產生的預設資源組名。 YAML 組態檔中提供的其他所有屬性都會覆寫提供做為此工作的自變數的值;例如,如果 containerAppName 自變數提供給工作,而且 name 屬性是在 YAML 組態檔中設定,則建立或更新容器應用程式時,將會使用 YAML 檔案中的 name 屬性。
映射和應用程式來源自變數(例如、appSourcePath、imageToDeploy)仍會用來第一次建置和/或推送容器應用程式所使用的映射:在此情況下,提供的 YAML 組態檔必須參考 imageToDeploy 所指定的映射(或 imageToBuild,視您的案例而定)。
建立新的容器應用程式時,會在建立容器應用程式時設定 YAML 組態檔中列出的所有屬性(除了上述 resourceGroup 除外)。 更新現有的容器應用程式時,容器應用程式上只會更新檔案中列出的屬性。
目前,YAML 檔案不支援為使用的容器登錄設定受控識別驗證;如需此問題的詳細資訊,請參閱 此 GitHub 問題。
在提供 yamlConfigPath 自變數的情況下,YAML 檔案會傳遞至對應的 az containerapp 命令,create 或視您的案例而定,update。 如需提供 YAML 組態檔時預期行為的詳細資訊,請參閱連結至對應命令的檔。
disableTelemetry
-
停用遙測
boolean。
如果設定為 『true』,則此 Azure DevOps 工作不會收集任何遙測。 如果設定為 『false』,或未提供此自變數,遙測會傳送至Microsoft此 Azure DevOps 工作的目標容器應用程式組建和部署案例。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制項選項和一般工作屬性。
輸出變數
沒有。
言論
此 Azure Pipelines 工作可讓使用者透過提供先前建置的映射、可從中建置映射的 Dockerfile,或使用建置器,為使用者建立可執行的應用程式映射,輕鬆地將應用程式來源部署到 Azure Container App。
工作具有下列兩種使用模式。
-
將映射推送至 ACR - 將新映射推送至 ACR 時,需要
acrName和appSourcePath工作輸入。 -
部署先前推送的映射 - 部署先前推送的映射時,需要
imageToDeploy工作輸入。 如果在需要驗證才能提取的 ACR 實例中找到此映像,則可以提供acrName自變數或acrUsername和acrPassword自變數,以驗證 ACR 實例的要求。
注意
雖然此工作的元數據中沒有正式標示為「必要」的工作輸入,但必須提供某些輸入,才能使用這兩個主要使用模式之一成功執行這項工作。
如果在提供的應用程式來源中找不到或提供 Dockerfile,則這項工作會執行下列步驟:
- 使用 Oryx++ Builder,使用 Oryx 建置應用程式來源,以產生可執行的應用程式映像
- 將此可執行的應用程式映像推送至提供的 Azure Container Registry
- 根據此映像建立或更新容器應用程式
如果在應用程式來源中找到或探索 Dockerfile,則不會使用建立器,而且會使用呼叫 docker build 建置映射,並根據此映像建立或更新容器應用程式。
如果先前建置的映像已推送至 ACR 實例,且已提供給此工作,則不需要任何應用程式來源,而且在建立或更新容器應用程式時會使用映像。
在Microsoft裝載的代理程序上執行這項工作
如果您在 Microsoft裝載的代理程式上執行這項工作,您可能會發現這項工作 無法 下列操作系統順利執行:
- macOS
- Microsoft所提供的 macOS 執行器 未隨 Docker 一起安裝(如需詳細資訊,請參閱這裡 ] 。因此,此工作無法執行任何
docker命令,例如將建置可執行的應用程式映像推送至 ACR。
- Microsoft所提供的 macOS 執行器 未隨 Docker 一起安裝(如需詳細資訊,請參閱這裡 ] 。因此,此工作無法執行任何
- 窗戶
- Microsoft所提供的 Windows 執行器 已安裝 Docker,但根據預設,Linux 型映射無法下拉;因此,此工作無法從提供的應用程式來源提取 Oryx 建立器,以建立可執行的應用程式映像。
如需詳細資訊,請參閱下列 Docker 必要條件一節。
數據/遙測收集注意事項
根據預設,此 Azure DevOps 工作會收集下列Microsoft數據:
- 容器應用程式建置和部署以用戶為目標的案例
- 亦即、使用 Oryx++ Builder、使用提供的/找到的 Dockerfile,或提供先前建置的映像
- 附註:未收集映像名稱
- 工作的處理時間,以毫秒為單位
- 工作的結果
- 即、成功或失敗
- 如果使用 Oryx++ Builder,則使用 Oryx 建置所提供應用程式的相關事件和計量
如果您要停用資料收集,請將 disableTelemetry 自變數設定為 true。
先決條件
在執行這項工作之前,Azure 資源和 Azure DevOps 服務連線是必要或選擇性的,視提供給這項工作的自變數而定。
Azure DevOps Service 連線
若要部署至 Azure,Azure 訂用帳戶必須使用 [設定] 區段中的 [服務] 索引卷標,連結至 Team Foundation Server 或 Azure Pipelines。 開啟 [帳戶管理] 畫面(畫面右上方的齒輪圖示),然後按兩下 [服務] 索引標籤,以新增 Azure 訂用帳戶以用於建置或發行管理定義。
建立 ARM 服務端點,並使用 'Azure Resource Manager' 端點類型;如需建立服務連線的詳細資訊,請遵循本檔 。
Azure 命令列介面 (Azure CLI)
此工作會要求 Azure PIPELINEs 代理程式上安裝 Azure CLI,以在整個工作執行期間執行各種命令。 如需如何在代理程式上安裝 Azure CLI 的詳細資訊,請參閱本檔 。 如果代理程式已在安裝 Azure CLI 的電腦上執行,請確定您重新啟動代理程式,以便更新所有相關的環境變數。
碼頭工人
此工作需要將 Docker 安裝在 Azure Pipelines 代理程式上,才能將映像推送至提供的 Azure Container Registry。 如需如何在代理程式上安裝 Docker 的詳細資訊,請參閱本檔 。
此外,使用 Windows 代理程式執行這項工作的使用者可能會遇到無法提取以 Linux 為基礎的映像的問題;若要解決此問題,請在代理程式上找出 DockerCli.exe 檔案(通常是在 Program Files\Docker\Docker 資料夾中),然後執行
& `.\DockerCli.exe` -SwitchDaemon
如果未在執行這項工作的代理程式上安裝 Docker,仍然會啟用下列案例:
- 提供先前建置的 映像給容器應用程式部署的
imageToDeploy自變數
如果 Docker 位於代理程式上,但無法使用以 Linux 為基礎的映像,仍會啟用下列案例:
- 提供先前建置的 映像給容器應用程式部署的
imageToDeploy自變數 - 提供
Dockerfile做為將搭配容器應用程式建置和部署的應用程式來源的一部分-
附注:
Dockerfile不能有任何以Linux為基礎的映射層
-
附注:
pack CLI
套件 CLI 是由 Cloud Native Buildpacks 專案維護,且此工作會在提供應用程式原始程式碼且未提供或找不到其他 Dockerfile 時,為使用者建立可執行的應用程式映像。 建立器 是由 Oryx 所建立,以接受提供給這項工作的應用程式原始程式碼,併產生映像,然後可以推送至映像登錄,並在容器應用程式內用來建置和執行應用程式。
執行工作的 Azure Pipelines 代理程式上會安裝穩定版本的套件 CLI,並根據此代理程式的基底 OS 而定,將會利用不同的工具來協助安裝:
- 在 Windows 執行器上:
- 系統會執行一組 PowerShell 命令來執行下列動作:
- 如果
pack資料夾不存在,請在代理程式的暫存資料夾中建立pack資料夾 - 將套件 CLI
.zip下載至此pack資料夾 - 解壓縮此
.zip的內容,並將其放在pack資料夾中 - 刪除
.zip
- 如果
- 系統會執行一組 PowerShell 命令來執行下列動作:
- 在非 Windows 執行器上:
-
curl將用來提取包含.tgz可執行檔的pack -
tar將用來解壓縮.tgz,並將pack可執行檔放在/usr/local/bin
-
Azure 容器登錄資料庫 (Azure Container Registry)
Azure Container Registry 用戶必須能夠將容器映射推送至該處。 這項工作會利用 Azure Container Registry,將建置可執行的應用程式映像推送至和/或部署容器應用程式。
必須透過 acrName 自變數來命名 Azure Container Registry。
使用者也可以提供 acrUsername 和 acrPassword 自變數的值,以驗證對 Azure Container Registry 實例的呼叫;如果未提供,則會透過 Azure CLI 產生存取令牌,以改為驗證呼叫。
Azure 容器應用程式環境
建議先由使用者建立 Azure Container App 環境,以改善工作的效能。 如果之前尚未建立環境,或在用來裝載所建立容器應用程式的資源群組中找不到環境,則會建立環境做為 az containerapp up 命令的一部分,這可能需要額外的時間。
例子
下列範例概述如何在不同的案例中使用 AzureContainerApps。
最小 - 建置容器應用程式的應用程式映像
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
這會在名為 ado-task-app-<build-id>-<build-number>的新資源群組中,建立名為 <container-app-name>-rg 的新容器應用程式。 容器應用程式會以從提供的 appSourcePath 建置的映像為基礎,並推送至提供的 ACR 實例。 將會產生存取令牌,以驗證推送至提供的 ACR 實例。
最小 - 針對容器應用程式使用先前發佈的映像
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
imageToDeploy: mcr.microsoft.com/<existing-image>:latest
這會在名為 ado-task-app-<build-id>-<build-number> 的新資源群組中建立名為 <container-app-name>-rg 的新容器應用程式,其中 不會建置任何新的映射,但名為 mcr.microsoft.com/<existing-image>:latest 的現有映像將用於容器應用程式。
最小 - 搭配先前發行的容器應用程式映像使用 YAML 組態檔
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
yamlConfigPath: simple-image-container-app.yaml
這會在名為 ado-task-app-<build-id>-<build-number> 的新資源群組中建立名為 <container-app-name>-rg 的新容器應用程式,其中 不會建置任何新的映射,但名為 mcr.microsoft.com/<existing-image>:latest 的現有映像將用於容器應用程式。 容器應用程式的相關其他屬性將會從 simple-image-container-app.yaml 檔案提取,並將覆寫提供給工作的任何其他值作為自變數,排除 resourceGroup。
simple-image-container-app.yaml 檔案具有下列結構:
properties:
managedEnvironmentId: /subscriptions/SUBSCRIPTION_ID/resourceGroups/RESOURCE_GROUP/providers/Microsoft.App/managedEnvironments/CONTAINER_APP_ENVIRONMENT
configuration:
ingress:
external: true
allowInsecure: false
targetPort: 80
template:
containers:
- image: mcr.microsoft.com/<existing-image>:latest
name: mysampleimagecontainer
SUBSCRIPTION_ID、RESOURCE_GROUP 和 CONTAINER_APP_ENVIRONMENT 的值必須更新,以指向容器應用程式將使用的現有 容器應用程式環境之 的完整資源標識符。
使用 ACR 認證進行驗證
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
acrUsername: $(ACR_USERNAME_SECRET)
acrPassword: $(ACR_PASSWORD_SECRET)
這會在名為 ado-task-app-<build-id>-<build-number>的新資源群組中,建立名為 <container-app-name>-rg 的新容器應用程式。 容器應用程式會以從提供的 appSourcePath 建置的映像為基礎,並推送至提供的 ACR 實例。 提供的 ACR 認證將用來驗證對 ACR 實例的呼叫。
提供的容器應用程式名稱
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
containerAppName: 'my-test-container-app'
這會在新的資源群組名稱中建立名為 my-test-container-app 的新容器應用程式,my-test-container-app-rg。
提供的資源群組
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
resourceGroup: 'my-test-rg'
這會在名為 ado-task-app-<build-id>-<build-number>的資源群組中建立名為 my-test-rg 的新容器應用程式。 如果 my-test-rg 資源群組不存在,則會建立為這項工作的一部分。
提供的容器應用程式名稱和資源群組
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
containerAppName: 'my-test-container-app'
resourceGroup: 'my-test-rg'
這會在名為 my-test-container-app的資源群組中建立名為 my-test-rg 的新容器應用程式。 如果 my-test-rg 資源群組不存在,則會建立為這項工作的一部分。
提供的容器應用程式環境
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
containerAppEnvironment: 'my-test-container-app-env'
這會在名為 ado-task-app-<build-id>-<build-number> 的新資源群組中建立名為 <container-app-name>-rg 的新容器應用程式,並使用名為 my-test-container-app-env的新容器應用程式環境。
提供的運行時間堆疊
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
runtimeStack: 'dotnetcore:7.0'
這會在名為 ado-task-app-<build-id>-<build-number> 的新資源群組中建立名為 <container-app-name>-rg 的新容器應用程式,其中可執行的應用程式映像正在使用 .NET 7 運行時間堆棧。
提供的 Dockerfile
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
dockerfilePath: 'test.Dockerfile'
這會在名為 ado-task-app-<build-id>-<build-number> 的新資源群組中建立名為 <container-app-name>-rg 的新容器應用程式,其中可從所提供應用程式來源路徑目錄中找到的 test.Dockerfile 檔案建立可執行的應用程式映像。
附注:對於提供給 dockerfilePath的值,不應包含任何檔案前置詞(例如,./test.Dockerfile 應以 test.Dockerfile傳遞)。 提供的 appSourcePath 和 dockerfilePath 自變數將會串連在工作內部。
要建置的映像
steps:
- task: AzureContainerApps@1
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
imageToBuild: 'mytestacr.azurecr.io/app:latest'
這會在名為 ado-task-app-<build-id>-<build-number> 的新資源群組中建立名為 <container-app-name>-rg 的新容器應用程式,其中建置並推送至 ACR 的映射名為 mytestacr.azurecr.io/app:latest。
要求
| 要求 | 描述 |
|---|---|
| 管線類型 | YAML、傳統組建、傳統版本 |
| 執行於 | Agent、DeploymentGroup |
| 需求 | 沒有 |
| 功能 | 此工作不符合作業中後續工作的任何需求。 |
| 命令限制 | 任何 |
| Settable 變數 | 任何 |
| 代理程式版本 | 2.144.0 或更新 |
| 工作類別 | 部署 |