发布管道和工件来源

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

使用 Azure Pipelines,可以从各种工件源部署工件,并将工作流与不同类型的工件存储库集成。 发布可以链接到多个工件源,其中一个工件源被指定为主要源。

工件源

Azure Pipelines 支持各种存储库、源代码管理工具和持续集成系统。

创建发布时,可以指定工件源的版本。 默认情况下,发布使用最新版本的源工件。 你还可以通过指定标记、特定版本来选择使用来自特定分支的最新生成,或者允许用户在创建发布时指定版本。

显示如何将工件添加到经典发布管道的屏幕截图。

如果链接多个工件,可以指定哪个工件是主要源(默认)。 主要工件源用于设置多个预定义变量。 主要工件源还可用于命名发布

显示如何设置主要源工件的屏幕截图。

注意

Default version 下拉列表中的项取决于链接的生成定义的源类型。

  • 所有存储库类型都支持以下选项:Specify at the time of release creationSpecific versionLatest

  • 以下存储库类型支持 Latest from a specific branch with tagsLatest from the build pipeline default branch with tags 选项:TfsGitGitHubBitbucketGitHubEnterprise

  • XAML 生成定义不支持 Latest from the build pipeline default branch with tags

以下各节介绍如何使用不同类型的工件源。

工件源 - Azure Pipelines

可以将发布管道链接到任何 Azure Pipelines 生成。 还可以链接多个生成管道并指定其默认值,并在多个生成源上设置部署触发器。 任何生成完成时,都会触发创建发布的操作。

将 Azure Pipelines 用作工件源时,可以使用以下功能:

功能 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。
部署阶段 生成摘要列出工件部署到的所有部署阶段。

注意

必须在生成管道中包含“发布工件”任务。 对于 YAML 生成管道,将隐式发布名为 drop 的工件。

默认情况下,发布使用集合级别作业授权范围运行。 这意味着发布可以访问组织内所有项目中的资源(或 Azure DevOps Server 的集合)。 这在链接其他工件中的生成工件时很有用。 可以在项目设置中启用“将工作授权范围限制为发布管道的当前项目”以限制对项目工件的访问。

为组织设置作业授权范围:

  • 导航到“组织设置”。
  • 在“管道”下选择“设置”。
  • 打开“对于发布管道,将作业授权范围限制为当前项目”开关,以将范围限制为当前项目。 这是良好安全措施的推荐设置。

为特定项目设置作业授权范围:

  • 导航到“项目设置”。
  • 在“管道”下选择“设置”。
  • 打开“对于发布管道,将作业授权范围限制为当前项目”开关,以将范围限制为当前项目。 这是建议的设置,因为此设置可增强管道的安全性。

注意

如果作用域在组织级别设置为项目,则无法更改每个项目中的范围。

发布中的所有作业都在作业授权范围设置为“集合”的情况下运行。 换句话说,这些作业有权访问项目集合中所有项目中的资源。

工件源 - 版本控制

在某些情况下,你可能希望直接使用不同源代码控件中的工件,而无需通过生成管道传递这些工件。 例如:

  • 开发不需要显式生成管道的 PHP 或 JavaScript 应用程序。

  • 你在不同的版本控制存储库中管理各个阶段的配置,并且希望直接从版本控制中使用这些配置文件(作为部署管道的一部分)。

  • 以代码的形式管理基础结构和配置,并希望在版本控制存储库中管理这些文件。

因为可以在单个发布管道中配置多个工件源,因此可以将生成管道(用于生成应用程序二进制文件)和版本控制存储库(用于存储配置文件)链接到同一管道中,并在部署时一起使用这两组工件。

Azure Pipelines 支持 Team Foundation 版本控制 (TFVC) 存储库、Git 存储库和 GitHub 存储库。

可以将发布管道链接到集合中任何项目中的任何 Git 或 TFVC 存储库(需要对这些存储库具有读取访问权)。 在同一集合中部署版本控制工件时,无需进行其他设置。

链接 GitHub 存储库并选择分支时,可以在保存工件后编辑工件类型的默认属性。 对于已更改工件的稳定版本的分支,这非常有帮助,持续交付发布应使用该分支获取工件的更新版本。 还可以指定签出的详细信息,例如签出子模块和 LFS 跟踪的文件,以及浅提取深度。

链接 TFVC 分支时,可以指定要在创建发布时部署的变更集。

将 TFVC、Git 和 GitHub 用作工件源时,可以使用以下功能:

功能 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。

默认情况下,发布使用集合级别作业授权范围运行。 这意味着发布可以访问组织内所有项目中的资源(或 Azure DevOps Server 的集合)。 这在链接其他工件中的生成工件时很有用。 可以在项目设置中启用“将工作授权范围限制为发布管道的当前项目”以限制对项目工件的访问。

工件源 - Jenkins

要使用 Jenkins 工件,必须创建服务连接以向 Jenkins 服务器进行身份验证。 有关详细信息,请参阅管理服务连接Jenkins 服务连接。 必须为 Jenkins 项目配置生成后操作才能发布工件。

使用 Jenkins 作为工件源时,可以使用以下功能:

功能 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。

由 Jenkins 生成所产生的工件通常会传播到存储库进行存档和共享。 Azure Blob 存储是受支持的存储库之一,用户可以使用发布到 Azure 存储的 Jenkins 工件作为发布管道中的工件源。 Azure Pipelines 自动将工件从 Azure 下载到运行管道的代理。 在此方案中,不需要代理与 Jenkins 服务器之间的连接。 无需将服务器公开到 Internet 即可使用 Microsoft 托管的代理。

注意

例如,如果 Jenkins 服务器在企业网络中,则 Azure Pipelines 可能无法联系 Jenkins 服务器。 如果是这种情况,可以设置可访问 Jenkins 服务器的本地代理,从而将 Azure Pipelines 与 Jenkins 集成。 链接到生成时,将无法看到 Jenkins 项目的名称,但可以在 URL 文本字段中输入名称。

工件源 - 容器

当部署容器化的应用时,首先将容器映像推送到容器注册表。 然后,可以将容器映像部署到用于容器的 Azure Web 应用或 Docker/Kubernetes 群集。 必须创建服务连接才能向 Azure 进行身份验证。 有关更多详细信息,请参阅管理服务连接

将 Azure 容器用作工件源时,可以使用以下功能:

Feature 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。

注意

使用多个工件源时,不支持通过映射工件源来触发特定阶段。 只要向任何工件源进行推送,就会创建发布。 如果希望这样做,Azure Pipelines 建议将发布管道拆分为多个发布。

工件源 - Azure Artifacts

在下列情况下,可以 Azure Artifacts 用作工件源:

  1. 应用程序二进制文件将发布到 Azure Artifacts,而且你希望在发布管道中使用包。
  2. 需要将其他包存储在 Azure Artifacts 中,作为部署工作流的一部分。

在发布管道中使用 Azure 工件时,必须为包选择“订阅源”、“包”和“默认版本”。 可以选择选取最新版本的包、使用特定版本,或者在创建发布时选择版本。 在部署期间,会将包下载/提取到运行管道的代理。

将 Azure Artifacts 用作工件源时,可以使用以下功能:

功能 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。

处理 Maven 快照

使用 Maven 快照时,可以同时下载多个版本(例如 myApplication-2.1.0.BUILD-20190920.220048-3.jarmyApplication-2.1.0.BUILD-20190820.221046-2.jarmyApplication-2.1.0.BUILD-20190820.220331-1.jar)。 在部署之前,可能需要移除旧版本,并仅保留最新的工件。 在提升的命令提示符下运行以下 PowerShell 命令,以移除除字典值最高的副本之外的所有副本:

Get-Item "myApplication*.jar" | Sort-Object -Descending Name | Select-Object -SkipIndex 0 | Remove-Item

注意

最多可以在订阅源中存储 30 个 Maven 快照。 达到最大限制后,Azure Artifacts 将自动删除快照,将快照数量降低到 25 个。 每次将超过 30 个快照发布到订阅源时,都会自动触发此过程。

工件源 - TFS 服务器

可以使用 Azure Pipelines 从 TFS 服务器部署工件,无需通过设置本地自动化代理而让你的服务器暴露在 Internet 上。 工件将被下载到本地代理,然后部署到指定的目标服务器,不会离开企业网络。 对于既要利用其本地基础结构投资,又要利用 Azure Pipelines 版本的客户而言,这是理想的选择。

若要将 TFS 服务器用作工件源,必须从 Visual Studio Marketplace 中安装适用于 Azure Pipelines 的 TFS 工件,然后创建一个服务连接以向 Azure Pipelines 进行身份验证。 通过身份验证后,可以将 TFS 生成管道链接到发布管道,并从“类型”下拉菜单中选择“外部 TFS 生成”。

将 TFS 服务器用作工件源时,可以使用以下功能:

功能 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。

如果本地 TFS 服务器位于企业网络内,Azure Pipelines 可能无法联系该服务器。 在这种情况下,可以设置能够访问 TFS 服务器的本地代理,从而将 Azure Pipelines 与 TFS 集成。 链接到生成时,将无法看到 TFS 项目或生成管道的名称,但可以在 URL 文本字段中包括这些变量。 此外,用户创建发布后,Azure Pipelines 可能无法在 TFS 服务器中查询生成号。 用户需要在相应的字段中输入所需内部版本的生成 ID(而不是生成号),或者选择最新的生成。

工件源 - TeamCity

要将 TeamCity 用作工件源,必须首先从 Visual Studio Marketplace 中安装适用于 Azure Pipelines 工件扩展。

完成后,创建服务连接 以向 TeamCity 服务器进行身份验证。 然后,可以将生成工件链接到发布管道。 必须使用发布工件的操作来设置 TeamCity 生成配置。

使用 TeamCity 作为工件源时,可以使用以下功能:

功能 说明
自动触发发布 当新的生成项目可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 Azure Pipelines 源支持许多工件变量
工作项和提交 可以链接 Azure Pipelines 工作项,该工作项将显示在发布详细信息中。 使用 Git 或 TFVC 源代码控件时,会显示提交。
工件下载 默认情况下,生成工件将下载到运行管道的代理。 还可以在阶段中配置一个步骤以跳过下载工件。

例如,如果 TeamCity 服务器在企业网络中,则 Azure Pipelines 可能无法联系 TeamCity 服务器。 在这种情况下,可以设置能够访问 TeamCity 服务器的本地代理,从而将 Azure Pipelines 与 TeamCity 集成。 链接到生成时,将无法看到 TeamCity 项目的名称,但可以在 URL 文本字段中输入此名称。

对象源别名

为了确保每个工件下载的唯一性,系统将自动为链接到发布管道的每个工件源提供一个特定的下载位置,称为源别名。 可以使用 $(System.DefaultWorkingDirectory)\[source alias] 变量访问此位置

使用源别名后,可确保无需编辑任务属性即可重命名链接的工件源,因为代理中定义的下载位置不会改变。

默认情况下,源别名工件源的名称,并以下划线作为前缀。 根据工件源的类型,这将是生成管道的名称、作业名称、项目名称或存储库名称。 可以从发布管道的“工件”选项卡编辑源别名。

工件下载

完成某个阶段的部署后,每个源中的版本控制工件将下载到管道代理,在该阶段中运行的任务便可以访问这些工件。 发布完成后,不会删除已下载的工件。 但是,在启动下一次发布时,下载的工件将被删除,并替换为新的工件集。

启动发布时,将在代理中针对每个发布管道创建一个新的唯一文件夹,并将工件下载到以下文件夹:$(System.DefaultWorkingDirectory)

如果再次部署同一发布,Azure Pipelines 不会执行任何优化以避免下载未更改的工件。 此外,由于在启动新发布时始终会删除以前下载的内容,因此 Azure Pipelines 无法对代理执行增量下载。

但如果需要,可以针对特定作业或阶段将管道设置为跳过自动下载