AzureContainerApps@0 - Azure Container Apps 部署 v0 工作
用來建置和部署 Azure Container Apps 的 Azure DevOps 工作。
Syntax
# Azure Container Apps Deploy v0
# An Azure DevOps Task to build and deploy Azure Container Apps.
- task: AzureContainerApps@0
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
.
執行文稿的目前工作目錄。 空白是存放庫 (組建) 或成品 (版本) 的根目錄,也就是 $(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 容器應用程式名稱
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
.
容器應用程式將接聽的目標埠。 如果未提供,則所有其他支持平臺的此值將會是 「80」 適用於 Python 應用程式和 「8080」。。
location
- 容器應用程式的位置
string
.
容器應用程式 (和其他已建立資源的位置,將會部署) 。
environmentVariables
- 環境變數
string
.
容器的環境變數清單 (s) 。 'key=value' 格式的空間分隔值。 空字串,可清除現有的值。 使用 'secretref:' 的前置值來參考秘密。
ingress
- 輸入設定
string
.
可能的選項:外部、內部、已停用。 如果建立容器應用程式) 時未提供預設值 external
(,則會根據設定的應用程式環境端點,從因特網或 VNET 顯示容器應用程式。 如果設定為 internal
,則容器應用程式只會從應用程式環境內顯示。 如果設定為 disabled
,將會停用此容器應用程式的輸入,而且不會有 HTTP 或 TCP 端點。
yamlConfigPath
- YAML 組態檔路徑
string
.
執行 Azure Pipelines 代理程式的完整路徑 () 到詳細說明容器應用程式的組態 YAML 檔案。
resourceGroup
不會使用 YAML 組態檔中的 屬性;此值來自resourceGroup
提供給工作的自變數,或工作所產生的預設資源組名。 YAML 組態檔中提供的其他所有屬性都會覆寫提供做為這項工作自變數的值;例如,如果將 containerAppName
自變數提供給工作,而且 name
屬性是在 YAML 組態檔中設定, name
則會在建立或更新容器應用程式時使用 YAML 檔案中的 屬性。
映射和應用程式來源自變數 (例如, appSourcePath
imageToDeploy
) 仍會用來第一次建置和/或推送容器應用程式所使用的映像;在此情況下,提供的 YAML 配置檔必須參考 (或 imageToBuild
指定的映像imageToDeploy
,視您的案例而定) 。
建立新的容器應用程式時,YAML 組態檔中列出的所有屬性都會 (,但 resourceGroup
建立容器應用程式時將會設定上述) 。 更新現有的容器應用程式時,容器應用程式上只會更新檔案中列出的屬性。
目前,YAML 檔案不支援為所使用的容器登錄設定受控識別驗證;如需此問題的詳細資訊,請參閱 此 GitHub 問題。
如果 yamlConfigPath
提供 自變數,YAML 檔案將會傳遞至對應的 az containerapp
命令, create
或update
視您的案例而定。 如需提供 YAML 組態檔時所預期行為的詳細資訊,請參閱連結以取得對應命令的檔。
如需 YAML 組態檔結構的詳細資訊,請造訪 此網站。
disableTelemetry
- 停用遙測
boolean
.
如果設定為 'true',此 Azure DevOps 工作將不會收集任何遙測。 如果設定為 『false』,或未提供此自變數,遙測將會傳送至 Microsoft,以瞭解此 Azure DevOps 工作的目標容器應用程式組建和部署案例。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制選項和一般工作屬性。
輸出變數
無。
備註
此 Azure Pipelines 工作可讓使用者藉由提供先前建置的映像、可從中建置映射的 Dockerfile,或使用建置器為使用者建立可執行的應用程式映射,輕鬆地將其應用程式來源部署至其 Azure Pipelines 工作流程中的 Azure 容器 應用程式。
工作具有下列兩種使用模式。
- 將映像推送至 ACR - 將新映像推送至 ACR 時,
acrName
需要和appSourcePath
工作輸入。 - 部署先前推送的映射 - 部署先前 推送的映射時,
imageToDeploy
需要工作輸入。 如果此映像位於需要驗證才能提取的 ACR 實例中,acrName
則可以提供自變數或acrUsername
和acrPassword
自變數來驗證 ACR 實例的要求。
注意
雖然此工作的元數據中沒有正式標示為「必要」的工作輸入,但必須提供一些輸入,才能讓這項工作使用兩個主要使用方式的其中一個成功執行。
如果在提供的應用程式來源中找不到或提供 Dockerfile,則這項工作會執行下列步驟:
- 使用 Oryx++ Builder 使用 Oryx 建置應用程式來源,以產生可執行的應用程式映像
- 將此可執行的應用程式映像推送至提供的 Azure Container Registry
- 根據此映像建立或更新容器應用程式
如果在應用程式來源中找到或探索 Dockerfile,則不會使用建立器,而且將會使用呼叫 docker build
來建置映射,且容器應用程式將會根據此映像建立或更新。
如果先前建置的映像已推送至 ACR 實例,且已提供給這項工作,則不需要任何應用程式來源,而且建立或更新容器應用程式時將會使用映像。
在 Microsoft 裝載的代理程式上執行這項工作
如果您在 Microsoft 裝載的代理程式上執行這項工作,您可能會發現此工作 無法 透過下列作業系統成功執行:
- macOS
- Windows
- 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 訂用帳戶以在建置或 Release Management 定義中使用。
建立 ARM 服務端點並使用「Azure Resource Manager」端點類型;如需建立服務連線的詳細資訊,請遵循本檔。
Azure CLI
此工作需要 Azure CLI 安裝在 Azure Pipelines 代理程式上,以在整個工作執行期間執行各種命令。 如需如何在代理程式上安裝 Azure CLI 的詳細資訊,請參閱 本檔。 如果代理程式已在安裝 Azure CLI 的電腦上執行,請確定您重新啟動代理程式,以便更新所有相關環境變數。
Docker
這項工作要求 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,而視此代理程式的基底操作系統而定,將會利用不同的工具來協助安裝:
- 在 Windows 執行器上:
- 系統會執行一組 PowerShell 命令來執行下列動作:
pack
如果資料夾不存在,請在pack
代理程式的暫存資料夾中建立資料夾- 將套件 CLI
.zip
下載至此pack
資料夾 - 從這個
.zip
解壓縮內容,並將其放在pack
資料夾中 - 刪除
.zip
- 系統會執行一組 PowerShell 命令來執行下列動作:
- 在非 Windows 執行器上:
curl
將用來提取.tgz
包含可執行檔的pack
tar
將用來解壓縮.tgz
並放置pack
可執行檔/usr/local/bin
Azure Container Registry
用戶必須能夠將容器映像推送至該 Azure Container Registry。 這項工作會利用 Azure Container Registry,將建置可執行的應用程式映像推送至 和/或從中部署容器應用程式。
透過自變數需要 acrName
Azure Container Registry 的名稱。
使用者也可以提供 和 acrPassword
自變數的值acrUsername
,以驗證對 Azure Container Registry 實例的呼叫;如果未提供,則會透過 Azure CLI 產生存取令牌,以改為驗證呼叫。
Azure 容器應用程式環境
建議使用者先前建立 Azure 容器應用程式環境 ,以改善工作的效能。 如果之前尚未建立環境,或者如果資源群組中找不到用來裝載所建立容器應用程式的環境,則會建立環境作為命令的 az containerapp up
一部分,這可能需要額外的時間。
範例
下列範例概述如何在不同的案例中使用 AzureContainerApps
。
最小 - 建置容器應用程式的應用程式映像
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
。 容器應用程式會以從提供的 appSourcePath
建置映射為基礎,並推送至提供的 ACR 實例。 將會產生存取令牌,以驗證推送至提供的 ACR 實例。
最小 - 針對容器應用程式使用先前發佈的映像
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
imageToDeploy: mcr.microsoft.com/azuredocs/containerapps-helloworld:latest
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
,其中未建置任何新的映像,但名為 mcr.microsoft.com/azuredocs/containerapps-helloworld:latest
的現有映像將用於容器應用程式。
最小 - 使用 YAML 配置檔搭配先前發行的容器應用程式映像
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
yamlConfigPath: simple-image-container-app.yaml
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
,其中未建置任何新的映像,但名為 mcr.microsoft.com/azuredocs/containerapps-helloworld:latest
的現有映像將用於容器應用程式。 容器應用程式的其他屬性將會從 simple-image-container-app.yaml
檔案提取,並且會覆寫任何其他已提供給工作的值,作為 排除的 resourceGroup
自變數。
檔案 simple-image-container-app.yaml
具有下列結構:
properties:
managedEnvironmentId: /subscriptions/SUBSCRIPTION_ID/resourceGroup/RESOURCE_GROUP/providers/Microsoft.App/managedEnvironments/CONTAINER_APP_ENVIRONMENT
configuration:
ingress:
external: true
allowInsecure: false
targetPort: 80
template:
containers:
- image: mcr.microsoft.com/azuredocs/containerapps-helloworld:latest
name: mysampleimagecontainer
和 CONTAINER_APP_ENVIRONMENT
的值SUBSCRIPTION_ID
RESOURCE_GROUP
必須更新,才能指向容器應用程式將使用的現有容器應用程式環境的完整資源標識符。
使用 ACR 認證進行驗證
steps:
- task: AzureContainerApps@0
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)
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
。 容器應用程式會以從提供的 appSourcePath
建置映射為基礎,並推送至提供的 ACR 實例。 提供的 ACR 認證將用來驗證對 ACR 實例的呼叫。
提供的容器應用程式名稱
steps:
- task: AzureContainerApps@0
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-rg
中建立名為 my-test-container-app
的新容器應用程式。
提供的資源群組
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
resourceGroup: 'my-test-rg'
這會在名為的資源群組中建立名為 my-test-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
。 my-test-rg
如果資源群組不存在,將會建立為這項工作的一部分。
提供的容器應用程式名稱和資源群組
steps:
- task: AzureContainerApps@0
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-rg
的新容器應用程式my-test-container-app
。 my-test-rg
如果資源群組不存在,將會建立為這項工作的一部分。
提供的容器應用程式環境
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
containerAppEnvironment: 'my-test-container-app-env'
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
,並建立名為 my-test-container-app-env
的新容器應用程式環境。
提供的運行時間堆疊
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
runtimeStack: 'dotnetcore:7.0'
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
,其中可執行的應用程式映射正在使用 .NET 7 運行時間堆棧。
提供的 Dockerfile
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
dockerfilePath: 'test.Dockerfile'
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式,ado-task-app-<build-id>-<build-number>
其中可從所提供應用程式來源路徑目錄中找到的test.Dockerfile
檔案建立可執行的應用程式映像。
注意:對於提供給 dockerfilePath
的值,不應該在 (包含任何檔案前置詞,例如./test.Dockerfile
,應該像) 一樣test.Dockerfile
傳遞。 提供的 appSourcePath
和 dockerfilePath
自變數將會串連在工作內。
要建置的映像
steps:
- task: AzureContainerApps@0
displayName: Build and deploy Container App
inputs:
connectedServiceNameARM: 'azure-subscription-service-connection'
appSourcePath: '$(System.DefaultWorkingDirectory)'
acrName: 'mytestacr'
imageToBuild: 'mytestacr.azurecr.io/app:latest'
這會在名為 的新資源群組中建立名為 <container-app-name>-rg
的新容器應用程式ado-task-app-<build-id>-<build-number>
,其中建置映像並推送至 ACR 的名稱為 mytestacr.azurecr.io/app:latest
。
規格需求
需求 | 描述 |
---|---|
管線類型 | YAML、傳統組建、傳統版本 |
在上執行 | Agent、DeploymentGroup |
要求 | 無 |
Capabilities | 此工作不符合作業中後續工作的任何需求。 |
命令限制 | 任何 |
可設定變數 | 任何 |
代理程式版本 | 2.144.0 或更新版本 |
工作類別 | 部署 |