用于生成和部署 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。
运行脚本的当前工作目录。 空是存储库(生成)或项目(release)的根目录,即 $(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 Contrainer 注册表的推送请求进行身份验证的用户名。 如果未提供,将通过“az acr login”生成访问令牌,并提供给“docker login”对请求进行身份验证。
acrPassword
-
Azure 容器注册表密码
string。
用于对提供的 Azure Contrainer 注册表的推送请求进行身份验证的密码。 如果未提供,将通过“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-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 文件,详细说明容器应用的配置。
YAML 配置文件 中的 resourceGroup 属性不会;该值要么来自提供给任务的 resourceGroup 参数,要么来自任务生成的默认资源组名称。 YAML 配置文件中提供的其他所有属性都将替代作为此任务的参数提供的值;例如,如果向任务提供 containerAppName 参数,并在 YAML 配置文件中设置 name 属性,则创建或更新容器应用时将使用 YAML 文件中的 name 属性。
映像和应用程序源参数(例如、appSourcePath、imageToDeploy)仍用于首次生成和/或推送容器应用使用的映像;在这种情况下,提供的 YAML 配置文件需要引用由 imageToDeploy 指定的映像(或 imageToBuild,具体取决于你的方案)。
创建新的容器应用时,将在创建容器应用时设置 YAML 配置文件中列出的所有属性(除上述 resourceGroup 除外)。 更新现有容器应用时,只会在容器应用上更新文件中列出的属性。
目前,YAML 文件不支持为使用的容器注册表设置托管标识身份验证;有关此问题的详细信息,请参阅 此 GitHub 问题。
如果提供了 yamlConfigPath 参数,YAML 文件将传递给相应的 az containerapp 命令,create 或根据方案 update。 有关提供 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 实例的请求进行身份验证。
注意
尽管此任务的元数据中没有正式标记为“必需”的任务输入,但需要提供一些输入,以便此任务能够使用两种主要使用模式之一成功运行。
如果未在提供的应用程序源中找到或提供 Dockerfile,则此任务将执行以下步骤:
- 使用 Oryx++ Builder 通过 Oryx 生成可运行的应用程序映像来生成应用程序源
- 将此可运行的应用程序映像推送到提供的 Azure 容器注册表
- 基于此映像创建或更新容器应用
如果在应用程序源中找到或发现 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 服务连接
若要部署到 Azure,必须使用“设置”部分中的“服务”选项卡将 Azure 订阅链接到 Team Foundation Server 或 Azure Pipelines。 通过打开“帐户管理”屏幕(屏幕右上角的齿轮图标),然后单击“服务”选项卡,添加要在“生成”或“发布管理”定义中使用的 Azure 订阅。
创建 ARM 服务终结点,并使用 “Azure 资源管理器” 终结点类型;有关创建服务连接的详细信息,请参阅本文档 。
Azure 命令行接口 (CLI)
此任务要求在 Azure Pipelines 代理上安装 Azure CLI,以便在整个任务执行过程中执行各种命令。 有关如何在代理上安装 Azure CLI 的详细信息,请参阅本文档 。 如果代理已在安装了 Azure CLI 的计算机上运行,请确保重启代理,以便更新所有相关环境变量。
码头工人
此任务要求在 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
包 CLI 由 Cloud Native Buildpacks 项目维护,此任务用于在提供应用程序源代码时为用户创建可运行的应用程序映像,并且未提供或找到其他 Dockerfile。 Oryx 创建了一个 生成器,用于获取提供给此任务的应用程序源代码,并生成一个映像,该映像随后可以推送到映像注册表,并在容器应用中用于生成和运行应用程序。
包 CLI 的稳定版本安装在执行任务的 Azure Pipelines 代理上,并且根据此代理的基本 OS,将利用不同的工具来帮助安装:
- 在 Windows 运行程序上:
- 执行一组 PowerShell 命令以执行以下操作:
- 在代理的临时文件夹中创建
pack文件夹(如果pack文件夹尚不存在) - 将包 CLI
.zip下载到此pack文件夹中 - 从此
.zip解压缩内容并将其放置在pack文件夹中 - 删除
.zip
- 在代理的临时文件夹中创建
- 执行一组 PowerShell 命令以执行以下操作:
- 在非 Windows 运行程序上:
-
curl将用于拉取包含.tgz可执行文件的pack -
tar将用于解压缩.tgz并将pack可执行文件置于/usr/local/bin
-
Azure 容器注册表
用户必须能够将容器映像推送到 Azure 容器注册表。 此任务将利用 Azure 容器注册表将生成的可运行应用程序映像推送到和/或从中部署容器应用。
Azure 容器注册表的名称需要通过 acrName 参数。
用户还可以为对 Azure 容器注册表实例的调用进行身份验证的 acrUsername 和 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/<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 的值更新为指向容器应用将使用的现有 容器应用环境的完整资源 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,经典版本,经典版本 |
| 运行时间 | 代理,DeploymentGroup |
| 需求 | 没有 |
| 功能 | 此任务不满足作业中后续任务的任何要求。 |
| 命令限制 | 任何 |
| Settable 变量 | 任何 |
| 代理版本 | 2.144.0 或更高版本 |
| 任务类别 | 部署 |
另请参阅
- 从 Azure Pipelines 部署到 Azure 容器应用