AzureContainerApps@1 - Azure 容器应用部署 v1 任务
用于生成和部署 Azure 容器应用的 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
.
运行脚本的当前工作目录。 空值为存储库(生成)或项目(发布)的根,即 $(System.DefaultWorkingDirectory)。
appSourcePath
- 应用程序源路径
string
.
要生成的源代码运行器上的绝对路径。 如果未提供,则必须提供“imageToDeploy”参数,以确保容器应用具有要引用的映像。
将新映像推送到 ACR 时, acrName
需要 和 appSourcePath
任务输入。
azureSubscription
- Azure 资源管理器连接
输入别名: connectedServiceNameARM
。 string
. 必需。
为部署指定 Azure 资源管理器 服务连接。 此服务连接必须链接到将在其中创建/更新容器应用的用户的 Azure 订阅。 此服务连接 必须 具有适当的权限才能在订阅中进行这些更改,例如参与者角色。
acrName
- Azure 容器注册表名称
string
.
可运行应用程序映像将推送到的Azure 容器注册表的名称。
将新映像推送到 ACR 时, acrName
需要 和 appSourcePath
任务输入。
acrUsername
- Azure 容器注册表用户名
string
.
用于对提供的 Azure 约束程序注册表的推送请求进行身份验证的用户名。 如果未提供,访问令牌将通过“az acr login”生成,并提供给“docker login”以对请求进行身份验证。
acrPassword
- Azure 容器注册表密码
string
.
用于对提供的 Azure Contrainer 注册表的推送请求进行身份验证的密码。 如果未提供,访问令牌将通过“az acr login”生成,并提供给“docker login”以对请求进行身份验证。
dockerfilePath
- Dockerfile 路径
string
.
相对路径 (_without 文件前缀 (请参阅以下示例) 提供的应用程序源中的 Dockerfile,该示例应用于生成随后推送到 ACR 并部署到容器应用的映像。 如果未提供,则此任务将在提供的应用程序源的根目录中存在名为“Dockerfile”的文件检查,并使用该文件生成映像。 否则,将使用 Oryx++ 生成器创建映像。
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-name>-env
创建环境。
runtimeStack
- 应用程序运行时堆栈
string
.
部署到容器应用的最终可运行应用程序映像中使用的平台版本堆栈。 值应在形成 <platform>:<version>
中提供。 如果未提供,则 Oryx 将根据提供的应用程序的内容确定此值。 有关 Oryx 支持的运行时堆栈的详细信息,请参阅 此文档 。
targetPort
- 应用程序目标端口
string
.
容器应用将侦听的目标端口。 如果未提供,则对于 Python 应用程序,此值将为“80”,对于所有其他受支持的平台,此值将为“8080”。
location
- 容器应用的位置
string
.
容器应用 (以及) 创建的其他资源将部署到的位置。
environmentVariables
- 环境变量
string
.
(容器) 环境变量的列表。 采用“key=value”格式的空格分隔值。 用于清除现有值的空字符串。 在值前面加上“secretref:”以引用机密。
ingress
- 入口设置
string
.
可能的选项:外部、内部、禁用。 如果设置为 external
(默认值,如果在创建容器应用) 时未提供,则容器应用将在 Internet 或 VNET 中可见,具体取决于配置的应用环境终结点。 如果设置为 internal
,容器应用将仅在应用环境中可见。 如果设置为 disabled
,则将为此容器应用禁用入口,并且不会具有 HTTP 或 TCP 终结点。
yamlConfigPath
- YAML 配置文件路径
string
.
正在执行的 Azure Pipelines 代理上 (的完整路径) 到详细说明容器应用的配置的 YAML 文件。
resourceGroup
不会使用 YAML 配置文件中的 属性;此值来自resourceGroup
提供给任务的参数或任务生成的默认资源组名称。 YAML 配置文件中提供的所有其他属性将替代作为此任务的参数提供的值;例如,如果将 containerAppName
参数提供给任务,并在 name
YAML 配置文件中设置 属性, name
则创建或更新容器应用时将使用 YAML 文件中的 属性。
映像和应用程序源参数 (例如 , appSourcePath
imageToDeploy
) 仍将用于首次生成和/或推送容器应用使用的映像;在这种情况下,提供的 YAML 配置文件将需要引用 (imageToDeploy
或 imageToBuild
指定的映像,具体取决于方案) 。
创建新的容器应用时,在创建容器应用时,将设置 YAML 配置文件中列出的所有属性 (除上述) 之外 resourceGroup
。 更新现有容器应用时,只会在容器应用上更新文件中列出的属性。
目前,YAML 文件不支持为使用的容器注册表设置托管标识身份验证;有关此问题的详细信息,请参阅 此 GitHub 问题。
在提供了 参数的情况下yamlConfigPath
,YAML 文件将传递到相应的az containerapp
命令,或create
update
具体取决于你的方案。 有关提供 YAML 配置文件时的预期行为的详细信息,请参阅为相应命令链接的文档。
有关 YAML 配置文件的结构的详细信息,请访问 此站点。
disableTelemetry
- 禁用遥测
boolean
.
如果设置为“true”,则此 Azure DevOps 任务不会收集任何遥测数据。 如果设置为“false”,或者未提供此参数,则有关此 Azure DevOps 任务所面向的容器应用生成和部署方案的遥测数据将发送给 Microsoft。
任务控制选项
除了任务输入,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性。
输出变量
无。
备注
此 Azure Pipelines 任务允许用户通过提供以前生成的映像、可从中生成映像的 Dockerfile 或使用生成器为用户创建可运行的应用程序映像,轻松地将其应用程序源部署到其 Azure Pipelines 工作流中的 Azure 容器应用 。
任务具有以下两种使用模式。
- 将映像推送到 ACR - 将新映像推送到 ACR 时,
acrName
需要 和appSourcePath
任务输入。 - 部署以前推送的映像 - 部署以前推送的映像时,
imageToDeploy
需要任务输入。 如果在需要拉取身份验证的 ACR 实例中找到此映像,acrName
则可以提供 参数或acrUsername
和acrPassword
参数,以对对 ACR 实例的请求进行身份验证。
注意
尽管此任务的元数据中没有正式标记为“必需”的任务输入,但需要提供一些输入,才能使用两个main用法的其中一个成功运行此任务。
如果在提供的应用程序源中找不到或未提供 Dockerfile,则此任务将执行以下步骤:
- 使用 Oryx++ 生成器生成使用 Oryx 生成可运行的应用程序映像的应用程序源
- 将此可运行的应用程序映像推送到提供的Azure 容器注册表
- 基于此映像创建或更新容器应用
如果在应用程序源中找到或发现 Dockerfile,则不会使用生成器,并且将通过调用 docker build
生成映像,并且将基于此映像创建或更新容器应用。
如果以前生成的映像已推送到 ACR 实例,并且已提供给此任务,则不需要任何应用程序源,并且将在创建或更新容器应用时使用该映像。
在 Microsoft 托管的代理上运行此任务
如果在 Microsoft 托管的代理上运行此任务,可能会发现此任务 无法在 以下操作系统中成功运行:
- macOS
- Windows
- Microsoft 提供的 Windows 运行程序 附带了 Docker,但默认情况下,基于 Linux 的映像无法下拉;因此,此任务无法下拉 Oryx 生成器以从提供的应用程序源创建可运行的应用程序映像。
有关详细信息,请参阅以下 Docker 先决条件部分。
数据/遥测收集通知
默认情况下,此 Azure DevOps 任务为 Microsoft 收集以下数据片段:
- 用户面向的容器应用生成和部署方案
- 例如,使用了 Oryx++ Builder,使用了提供的/找到的 Dockerfile,或者提供了以前生成的映像
- 注意: 未 收集映像名称
- 任务的处理时间(以毫秒为单位)
- 任务的结果
- 即成功或失败
- 如果使用 Oryx++ 生成器,则与使用 Oryx 生成提供的应用程序相关的事件和指标
如果要禁用数据收集,请将 参数设置为 disableTelemetry
true
。
先决条件
运行此任务之前,Azure 资源和 Azure DevOps 服务连接是必需或可选的,具体取决于为此任务提供的参数。
Azure DevOps 服务连接
若要部署到 Azure,必须使用“设置”部分中的“服务”选项卡将 Azure 订阅链接到 Team Foundation Server 或 Azure Pipelines。 通过打开屏幕右上角的“帐户管理”屏幕 (齿轮图标,然后单击“服务”选项卡,添加在“生成) 或Release Management”定义中使用的 Azure 订阅。
创建 ARM 服务终结点并使用“Azure 资源管理器”终结点类型;有关创建服务连接的详细信息,请参阅此文档。
Azure CLI
此任务要求在 Azure Pipelines 代理上安装 Azure CLI,以在整个任务执行过程中执行各种命令。 有关如何在代理上安装 Azure CLI 的详细信息,请参阅 此文档。 如果代理已在安装了 Azure CLI 的计算机上运行,请确保重启代理,以便更新所有相关环境变量。
Docker
此任务要求在 Azure Pipelines 代理上安装 Docker,以便将映像推送到提供的 Azure 容器注册表。 有关如何在代理上安装 Docker 的详细信息,请参阅 此文档。
此外,使用 Windows 代理运行此任务的用户可能会遇到无法拉下基于 Linux 的映像的问题;若要解决此问题,请访问 此站点 或找到 DockerCli.exe
代理上的文件, (通常位于 Program Files\Docker\Docker
) 文件夹中,然后运行
& `.\DockerCli.exe` -SwitchDaemon
如果未在运行此任务的代理上安装 Docker,则仍会启用以下方案 () :
- 向容器应用部署时使用的 参数提供以前生成的映像
imageToDeploy
如果 Docker 位于代理上,但无法使用基于 Linux 的映像,则以下方案 (仍启用) :
- 向容器应用部署时使用的 参数提供以前生成的映像
imageToDeploy
Dockerfile
作为应用程序源的一部分提供 ,该源将与容器应用一起生成和部署- 注意:不能
Dockerfile
有任何基于 Linux 的映像层
- 注意:不能
pack CLI
Pack CLI 由 Cloud Native Buildpacks 项目维护,当提供应用程序源代码且未提供或找不到其他 Dockerfile 时,此任务将使用该 CLI 为用户创建可运行的应用程序映像。 Oryx 创建了 一个生成器 ,用于获取提供给此任务的应用程序源代码,并生成一个映像,该映像随后可以推送到映像注册表,并在容器应用中用于生成和运行应用程序。
在执行任务的 Azure Pipelines 代理上安装稳定版本的 pack CLI,根据此代理的基本 OS,将利用不同的工具来帮助安装:
- 在 Windows 运行器上:
- 执行一组 PowerShell 命令以执行以下操作:
- 在代理的临时文件夹中创建一个
pack
文件夹(如果该pack
文件夹尚不存在) - 将 pack CLI
.zip
下载到此pack
文件夹中 - 从中
.zip
解压缩内容并将其放置在pack
文件夹中 - 删除
.zip
- 在代理的临时文件夹中创建一个
- 执行一组 PowerShell 命令以执行以下操作:
- 在非 Windows 运行器上:
curl
将用于下.tgz
拉包含可执行文件的pack
tar
将用于解压缩 ,.tgz
并将可执行文件放入pack
/usr/local/bin
Azure 容器注册表
必须存在用户能够将容器映像推送到的Azure 容器注册表。 此任务将利用Azure 容器注册表将生成的可运行应用程序映像推送到和/或从中部署容器应用。
通过 参数需要acrName
Azure 容器注册表的名称。
用户还可以为 acrUsername
对 Azure 容器注册表 实例的调用进行身份验证的 和 acrPassword
参数提供值;如果未提供,将通过 Azure CLI 生成访问令牌,用于对调用进行身份验证。
Azure 容器应用环境
建议使用以前由用户创建的 Azure 容器应用环境 ,以提高任务的性能。 如果之前未创建任何环境,或者如果在用于托管创建的容器应用的资源组中找不到环境,则将创建一个环境作为命令的 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/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@1
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
和 的值SUBSCRIPTION_ID
RESOURCE_GROUP
CONTAINER_APP_ENVIRONMENT
必须更新为指向容器应用将使用的现有容器应用环境的完整资源 ID。
使用 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 |
需求 | 无 |
功能 | 此任务不满足作业中后续任务的任何要求。 |
命令限制 | 任意 |
可设置变量 | 任意 |
代理版本 | 2.144.0 或更高版本 |
任务类别 | 部署 |