AzureContainerApps@0 - Azure 容器应用部署 v0 任务

用于生成和部署 Azure 容器应用的 Azure DevOps 任务。

语法

# 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 - 工作目录
输入别名: cwdstring.

运行脚本的当前工作目录。 空值为存储库(生成)或项目(发布)的根,即 $(System.DefaultWorkingDirectory)。


appSourcePath - 应用程序源路径
string.

要生成的源代码运行器上的绝对路径。 如果未提供,则必须提供“imageToDeploy”参数,以确保容器应用具有要引用的映像。

将新映像推送到 ACR 时, acrName 需要 和 appSourcePath 任务输入。


azureSubscription - Azure 资源管理器连接
输入别名: connectedServiceNameARMstring. 必需。

为部署指定 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 则可以提供 参数或 acrUsernameacrPassword 参数,以对对 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 文件中的 属性。

映像和应用程序源参数 (例如appSourcePathimageToDeploy) 仍将用于首次生成和/或推送容器应用使用的映像;在这种情况下,提供的 YAML 配置文件将需要引用 (imageToDeployimageToBuild指定的映像,具体取决于方案) 。

创建新的容器应用时,在创建容器应用时,将设置 YAML 配置文件中列出的所有属性 (除上述) 之外 resourceGroup 。 更新现有容器应用时,只会在容器应用上更新文件中列出的属性。

目前,YAML 文件不支持为使用的容器注册表设置托管标识身份验证;有关此问题的详细信息,请参阅 此 GitHub 问题

在提供了 参数的情况下yamlConfigPath,YAML 文件将传递到相应的az containerapp命令,或createupdate 具体取决于你的方案。 有关提供 YAML 配置文件时的预期行为的详细信息,请参阅为相应命令链接的文档。

有关 YAML 配置文件的结构的详细信息,请访问 此站点


disableTelemetry - 禁用遥测
boolean.

如果设置为“true”,则此 Azure DevOps 任务不会收集任何遥测数据。 如果设置为“false”,或者未提供此参数,则有关此 Azure DevOps 任务所面向的容器应用生成和部署方案的遥测数据将发送给 Microsoft。


任务控制选项

除了任务输入,所有任务都有控制选项。 有关详细信息,请参阅 控制选项和常见任务属性

输出变量

无。

备注

此 Azure Pipelines 任务允许用户通过提供以前生成的映像、可从中生成映像的 Dockerfile 或使用生成器为用户创建可运行的应用程序映像,轻松地将其应用程序源部署到其 Azure Pipelines 工作流中的 Azure 容器应用

任务具有以下两种使用模式。

  • 将映像推送到 ACR - 将新映像推送到 ACR 时, acrName 需要 和 appSourcePath 任务输入。
  • 部署以前推送的映像 - 部署以前推送的映像时, imageToDeploy 需要任务输入。 如果在需要拉取身份验证的 ACR 实例中找到此映像, acrName 则可以提供 参数或 acrUsernameacrPassword 参数,以对对 ACR 实例的请求进行身份验证。

注意

尽管此任务的元数据中没有正式标记为“必需”的任务输入,但需要提供一些输入,才能使用两个main用法的其中一个成功运行此任务。

如果在提供的应用程序源中找不到或未提供 Dockerfile,则此任务将执行以下步骤:

  • 使用 Oryx++ 生成器生成应用程序源,使用 Oryx 生成可运行的应用程序映像
  • 将此可运行的应用程序映像推送到提供的Azure 容器注册表
  • 基于此映像创建或更新容器应用

如果在应用程序源中找到或发现 Dockerfile,则不会使用生成器,并且会通过调用 docker build 生成映像,并且将基于此映像创建或更新容器应用。

如果以前生成的映像已推送到 ACR 实例并提供给此任务,则不需要任何应用程序源,创建或更新容器应用时将使用映像。

在 Microsoft 托管的代理上运行此任务

如果在 Microsoft 托管的代理上运行此任务,可能会发现此任务 无法在 以下操作系统中成功运行:

  • macOS
    • Microsoft 提供的 macOS 运行器 未随 Docker 一起安装 (详细信息,请参阅) :因此,此任务无法运行任何 docker 命令,例如将生成的可运行应用程序映像推送到 ACR。
  • Windows
    • Microsoft 提供的 Windows 运行程序 已安装 Docker,但默认情况下,无法拉下基于 Linux 的映像;因此,此任务无法拉下 Oryx 生成器以从提供的应用程序源创建可运行的应用程序映像。

有关详细信息,请参阅下面的 Docker 先决条件部分。

数据/遥测收集通知

默认情况下,此 Azure DevOps 任务为 Microsoft 收集以下数据:

  • 面向用户的容器应用生成和部署方案
    • ,使用了 Oryx++ 生成器、使用提供的/找到的 Dockerfile 或提供了以前生成的映像
    • 注意 收集映像名称
  • 任务的处理时间(以毫秒为单位)
  • 任务的结果
    • 成功或失败
  • 如果使用 Oryx++ Builder,则与使用 Oryx 生成提供的应用程序相关的事件和指标

如果要禁用数据收集,请将 参数设置为 disableTelemetrytrue

先决条件

运行此任务之前,Azure 资源和 Azure DevOps 服务连接是必需或可选的,具体取决于为此任务提供的参数。

Azure DevOps 服务连接

若要部署到 Azure,必须使用“设置”部分中的“服务”选项卡将 Azure 订阅链接到 Team Foundation Server 或 Azure Pipelines。 通过打开屏幕右上角的“帐户管理”屏幕 (齿轮图标,然后单击“服务”选项卡,将 Azure 订阅添加到生成或) Release Management定义中。

创建 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
  • 在非 Windows 运行器上:
    • curl将用于拉取.tgz包含可执行文件的pack
    • tar将用于解压缩 并将.tgz可执行文件放入pack/usr/local/bin

Azure 容器注册表

必须存在用户能够将容器映像推送到的Azure 容器注册表。 此任务将利用Azure 容器注册表将生成的可运行应用程序映像推送到和/或从中部署容器应用。

通过 acrName 参数需要Azure 容器注册表的名称。

用户还可以为 acrUsernameacrPassword 参数提供值,用于对 Azure 容器注册表 实例的调用进行身份验证;如果未提供,将通过 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'

这会在名为 ado-task-app-<build-id>-<build-number> 的新资源组中创建名为 <container-app-name>-rg的新容器应用。 容器应用将基于从提供的 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

这会在名为 ado-task-app-<build-id>-<build-number> 的新资源组 <container-app-name>-rg 中创建一个名为 的新容器应用,其中 未生成任何新映像,但名为 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

这会在名为 ado-task-app-<build-id>-<build-number> 的新资源组 <container-app-name>-rg 中创建一个名为 的新容器应用,其中 未生成任何新映像,但名为 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_IDRESOURCE_GROUPCONTAINER_APP_ENVIRONMENT必须更新为指向容器应用将使用的现有容器应用环境的完整资源 ID。

使用 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)

这会在名为 ado-task-app-<build-id>-<build-number> 的新资源组中创建名为 <container-app-name>-rg的新容器应用。 容器应用将基于从提供的 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'

这会在名为 的资源组中创建名为 ado-task-app-<build-id>-<build-number>my-test-rg的新容器应用。 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-container-appmy-test-rg的新容器应用。 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'

这将在名为 ado-task-app-<build-id>-<build-number> 的新资源组 <container-app-name>-rg 中创建一个名为 的新容器应用,并使用名为 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'

这将在名为 ado-task-app-<build-id>-<build-number> 的新资源组 <container-app-name>-rg 中创建一个名为 的新容器应用,其中可运行的应用程序映像使用 .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'

这会在名为 ado-task-app-<build-id>-<build-number> 的新资源组 <container-app-name>-rg 中创建一个名为 的新容器应用,其中可运行的应用程序映像是从 test.Dockerfile 提供的应用程序源路径目录中找到的文件创建的。

注意:对于提供给 dockerfilePath的值,不应包含任何文件前缀 (例如./test.Dockerfile 应仅 test.Dockerfile 传递) 。 提供的 appSourcePathdockerfilePath 参数将连接在任务内。

提供的要生成的映像

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'

这会在名为 ado-task-app-<build-id>-<build-number> 的新资源组 <container-app-name>-rg 中创建名为 的新容器应用,其中生成并推送到 ACR 的映像名为 mytestacr.azurecr.io/app:latest

要求

要求 说明
管道类型 YAML、经典版本、经典版本
运行平台 Agent、DeploymentGroup
需求
功能 此任务不满足作业中后续任务的任何要求。
命令限制 任意
可设置变量 任意
代理版本 2.144.0 或更高版本
任务类别 部署

另请参阅