发布工件和工件源

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

注意

在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。

注意

本主题介绍经典发布管道。 若要了解 YAML 管道中的项目,请参阅 项目

发布是DevOps CI/CD 进程中的项目集合。 “项目”是应用程序的可部署组件。 Azure Pipelines可以部署由各种项目源生成的项目,并存储在不同类型的项目存储库中。

创作发布管道时,可将相应的项目源链接到发布管道。 例如,可以将Azure Pipelines生成管道或 Jenkins 项目链接到发布管道。

创建发布时,请指定这些项目源的确切版本;例如,来自Azure Pipelines的生成数,或来自 Jenkins 项目的生成版本的版本。

创建发布后,无法更改这些版本。 版本由构成该版本的版本控制项目从根本上定义。 将发布部署到各个阶段时,你将在所有阶段部署和验证相同的项目。

单个发布管道可以链接到 多个项目源,其中一个是 主源。 在这种情况下,在创建发布时,请为每个源指定各个版本。

Artifacts in a pipeline and release

Artifacts是Azure Pipelines中许多功能的核心。 依赖于项目链接到发布管道的一些功能包括:

  • 自动触发版本。 每当生成新版本的项目时,都可以将新版本配置为自动创建。 有关详细信息,请参阅 持续部署触发器。 请注意,自动创建版本的功能仅适用于某些项目源。

  • 触发器条件。 可以将发布配置为自动创建,或者在仅满足项目的特定条件时,将发布部署到自动触发的阶段。 例如,仅当从特定分支生成新生成时,才能将版本配置为自动创建。

  • 项目版本。 可以将发布配置为自动使用特定版本的生成项目、始终使用最新版本,或者允许在创建发布时指定版本。

  • 项目变量。 作为发布一部分的每个项目都有与其关联的元数据,通过变量任务公开。 此元数据包括项目的版本号、在生成项目或源代码项目) 的情况下生成项目 (的代码分支、生成项目 (的管道) 等。 可以在部署任务中访问此信息。 有关详细信息,请参阅 项目变量

  • 工作项和提交。 作为发布一部分的工作项或提交从项目版本计算。 例如,Azure Pipelines中的每个生成都与一组工作项和提交相关联。 在发布中,工作项或提交将计算为当前版本与上一个版本之间的所有工作项和提交的所有工作项的联合。 请注意,Azure Pipelines目前只能计算某些项目源的工作项和提交。

  • 项目下载。 每当发布部署到阶段时,默认情况下Azure Pipelines会自动将该版本中的所有项目下载到运行部署作业的代理。 下载项目的过程取决于项目的类型。 例如,Azure Pipelines项目是使用并行下载多个文件的算法下载的。 Git 项目是使用 Git 库功能下载的。 有关详细信息,请参阅 项目下载

项目源

应用程序生命周期过程中可以使用多种工具生成或存储项目。 例如,可以使用持续集成系统(如 Azure Pipelines、Jenkins 或 TeamCity)生成项目。 还可以使用 Git 或 TFVC 等版本控制系统来存储项目。 也可以使用存储库(如Azure Artifacts或NuGet存储库)来存储项目。 可以将Azure Pipelines配置为从所有这些源部署项目。

默认情况下,从发布管道创建的发布将使用最新版本的项目。 将项目源链接到发布管道时,可以通过通过指定标记、特定版本或允许用户在从管道创建发布时指定版本来选择一个选项来使用特定分支的最新生成来更改此行为。

Adding an artifact

如果链接多个项目集,可以指定哪个项目是默认 (默认) 。

Selecting a default version option

重要

ArtifactsDefault version下拉列表项取决于repository type链接生成定义。

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

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

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

以下部分介绍如何使用不同类型的项目源。

项目源 - Azure Pipelines

可以将发布管道链接到 Azure Pipelines 或 TFS 项目集合中的任何生成管道。

注意

必须在生成管道中包含发布Artifacts任务。 对于 YAML 生成管道,将隐式发布具有名称 删除 的项目。

不同版本的 TFS 和 Azure Pipelines 之间的功能存在一些差异:

  • TFS 2015:只能从集合的同一个项目链接生成管道。 可以链接多个定义,但不能指定默认版本。 只能在其中一个定义上设置持续部署触发器。 链接多个生成管道时,将使用所有其他定义的最新生成,以及触发发布创建的生成。

  • TFS 2017 及更新和Azure Pipelines:可以从 Azure Pipelines 或 TFS 中的任何项目链接生成管道。 可以链接多个生成管道,并为每个管道指定默认值。 可以在多个生成源上设置持续部署触发器。 当任何生成完成时,它将触发发布创建。

使用Azure Pipelines源时,可以使用以下功能:

功能 具有Azure Pipelines源的行为
自动触发版本 生成 (包含 XAML 生成) 的新版本时,可以自动创建新版本。 有关详细信息,请参阅 持续部署 。 无需在生成管道中配置任何内容。 有关 TFS 版本之间的差异,请参阅上述说明。
项目变量 从 Azure Pipelines 生成支持多个项目变量
工作项和提交 Azure Pipelines与 TFS 和 Azure Pipelines 中的工作项集成。 这些工作项也显示在发布的详细信息中。 Azure Pipelines与许多版本控制系统(如 TFVC 和 Git、GitHub、Subversion 和其他 Git 存储库)集成。 Azure Pipelines仅在从 TFVC 或 Git 中的源代码生成生成时才显示提交。
项目下载 默认情况下,生成项目将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载
生成中的部署部分 生成摘要包括 “部署 ”部分,其中列出了部署生成的所有阶段。

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

若要为组织设置作业授权范围,请执行以下操作:

  • 导航到Azure DevOps用户界面中的组织设置页面。
  • 选择Pipelines下的设置。
  • 打开“将 作业授权范围限制为当前项目”,以便发布管道 将范围限制为当前项目。 这是建议的设置,因为它增强了管道的安全性。

若要为特定项目设置作业授权范围,请执行以下操作:

  • 导航到Azure DevOps用户界面中的项目设置页。
  • 选择Pipelines下的设置。
  • 打开“将作业授权范围限制为当前项目”,以将范围限制为项目。 这是建议的设置,因为它增强了管道的安全性。

注意

如果范围设置为组织级别的项目,则不能更改每个项目中的范围。

版本中的所有作业都运行,作业授权范围设置为集合。 换句话说,这些作业可以访问项目集合中所有项目中的资源。

项目源 - 版本控制

在某些情况下,你可能想要直接使用存储在版本控制系统中的项目,而无需通过生成管道传递它们。 例如:

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

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

  • 将基础结构和配置作为代码 ((例如 Azure 资源管理器 模板)管理) ,并且想要在版本控制存储库中管理这些文件。

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

Azure Pipelines与 Team Foundation 版本控制 (TFVC) 存储库、Git 存储库和GitHub存储库集成。

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

链接 GitGitHub存储库并选择分支时,可以在保存项目后编辑项目类型的默认属性。 这在项目稳定版本的分支更改的情况下特别有用,持续交付版本应使用此分支来获取项目的较新版本。 还可以指定签出的详细信息,例如签出子模块和 LFS 跟踪的文件以及浅提取深度。

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

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

功能 使用 TFVC、Git 和GitHub源的行为
自动触发版本 可以配置持续部署触发器,以便在发布管道中推送到存储库中。 当向存储库提交新提交时,这会自动触发发布。 请参阅触发器
项目变量 版本控制源支持许多 项目变量
工作项和提交 Azure Pipelines在使用版本控制项目时无法显示与发布关联的工作项或提交。
项目下载 默认情况下,版本控制项目将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载

默认情况下,发布使用集合级别作业授权范围执行。 这意味着发布可以访问组织中的所有存储库, (或集合中用于Azure DevOps Server) 。 可以在项目设置中 将作业授权范围限制为当前项目的发布管道 ,以限制对项目中发布项目的访问。

项目源 - Jenkins

若要使用 Jenkins 项目,必须使用凭据创建服务连接以连接到 Jenkins 服务器。 有关详细信息,请参阅 服务连接Jenkins 服务连接。 然后,可以将 Jenkins 项目链接到发布管道。 Jenkins 项目必须配置生成后操作才能发布项目。

使用 Jenkins 源时,可以使用以下功能:

功能 使用 Jenkins 源的行为
自动触发版本 可以配置持续部署触发器,以便在发布管道中推送到存储库中。 当向存储库提交新提交时,这会自动触发发布。 请参阅触发器
项目变量 Jenkins 的生成支持许多 项目变量
工作项和提交 Azure Pipelines无法显示 Jenkins 生成的工作项或提交。
项目下载 默认情况下,Jenkins 生成将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载

Jenkins 生成生成的Artifacts通常传播到存储存储库进行存档和共享。 Azure Blob 存储是受支持的存储库之一,允许使用发布到 Azure 存储的 Jenkins 项目作为发布管道中的项目源。 部署会自动将项目从 Azure 下载到代理。 在此配置中,不需要代理与 Jenkins 服务器之间的连接。 无需将服务器公开到 Internet 即可使用 Microsoft 托管代理。

注意

例如,如果 Jenkins 服务器位于企业网络中,则Azure Pipelines可能无法联系你的 Jenkins 服务器。 在这种情况下,可以通过设置可访问 Jenkins 服务器的本地代理,将Azure Pipelines与 Jenkins 集成。 链接到生成时,将无法看到 Jenkins 项目的名称,但你可以在链接对话框字段中键入此名称。

有关 Jenkins 集成功能的详细信息,请参阅Azure Pipelines与 Jenkins 作业的集成、Pipelines和Artifacts

项目源 - 容器

当部署容器化的应用时,首先将容器映像推送到容器注册表。 推送完成后,容器映像可以部署到用于容器服务的 Web 应用或 Docker/Kubernetes 群集。 必须使用凭据创建服务连接以连接到服务以部署位于那里或 Azure 的映像。 有关详细信息,请参阅服务连接

使用 Azure 容器注册表、Docker、Kubernetes 源时,可以使用以下功能:

功能 使用 Docker 源的行为
自动触发版本 可以为映像配置持续部署触发器。 当向存储库提交新提交时,这会自动触发发布。 请参阅触发器
项目变量 生成支持多个 项目变量
工作项和提交 Azure Pipelines无法显示工作项或提交。
项目下载 默认情况下,内部版本将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载

注意

如果从多个项目源持续部署 (多个注册表/存储库) ,则无法将项目源映射到触发特定阶段。 只要有推送到任何项目源,就会创建发布。 如果要将项目源映射到触发特定阶段,建议的方法是将发布管道分解为多个发布管道。

项目源 - Azure Artifacts

你可能想要使用这些项目的方案包括:

  1. 应用程序生成 (,例如 TFS、Azure Pipelines、TeamCity、Jenkins) 发布为包以Azure Artifacts,并且想要在版本中使用该项目。
  2. 作为应用程序部署的一部分,需要存储在Azure Artifacts中的其他包。

将此类项目链接到发布管道时,必须选择包的源、包和默认版本。 可以选择选取最新版本的包、使用特定版本或在创建发布时选择版本。 在部署期间,包将下载到代理文件夹,并将内容提取为作业执行的一部分。

使用Azure Artifacts源时,可以使用以下功能:

功能 具有Azure Artifacts源的行为
自动触发版本 可以为包配置持续部署触发器。 更新包时,这会自动触发发布。 请参阅触发器
项目变量 包支持许多 项目变量
工作项和提交 Azure Pipelines无法显示工作项或提交。
项目下载 默认情况下,包将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载

处理 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) 。 可能需要删除旧副本,并仅在部署之前保留最新的 Artifact。 在提升的命令提示符中运行以下 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 服务器发布的项目。 无需使 TFS 服务器在 Internet 上可见;只需设置本地自动化代理。 从本地 TFS 服务器生成直接下载到本地代理,然后部署到指定的目标服务器。 它们不会离开你的企业网络。 这样就可以利用本地 TFS 服务器中的所有投资,并利用Azure Pipelines中的发布功能。

提示

使用此机制,还可以部署在另一个Azure Pipelines的一个Azure Pipelines订阅中发布的项目,或者从另一个Team Foundation Server部署在一个Team Foundation Server中发布的项目。

若要启用这些方案,必须从 Visual Studio 市场安装 Azure Pipelines 扩展的 TFS 项目。 然后使用凭据创建服务连接以连接到 TFS 服务器 (查看 服务连接 以了解详细信息) 。

然后,可以将 TFS 生成管道链接到发布管道。 在“类型”列表中选择“外部 TFS 生成”。

使用外部 TFS 源时,可以使用以下功能:

功能 具有外部 TFS 源的行为
自动触发版本 无法在发布管道中为外部 TFS 源配置持续部署触发器。 若要在生成完成后自动创建新版本,需要向外部 TFS 服务器中的生成管道添加脚本,以调用Azure Pipelines REST API 并创建新版本。
项目变量 外部 TFS 源支持许多 项目变量
工作项和提交 Azure Pipelines无法显示外部 TFS 源的工作项或提交。
项目下载 默认情况下,外部 TFS 项目将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载

注意

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

项目源 - TeamCity

若要与 TeamCity 集成,必须先从市场安装用于Azure Pipelines扩展的 TeamCity 项目

若要使用 TeamCity 项目,请先使用凭据创建服务连接以连接到 TeamCity 服务器, (查看 服务连接 以了解详细信息) 。

然后,可以将 TeamCity 生成配置链接到发布管道。 TeamCity 生成配置必须配置一个操作才能发布项目。

使用 TeamCity 源时,可以使用以下功能:

功能 TeamCity 源的行为
自动触发版本 无法在发布管道中为 TeamCity 源配置持续部署触发器。 若要在生成完成后自动创建新版本,请将脚本添加到 TeamCity 项目,该项目调用 Azure Pipelines REST API 以创建新版本。
项目变量 TeamCity 的生成支持许多 项目变量
工作项和提交 Azure Pipelines无法显示 TeamCity 生成的工作项或提交。
项目下载 默认情况下,TeamCity 内部版本将下载到代理。 可以在阶段中配置一个选项, 以跳过项目下载

注意

例如,如果 TeamCity 服务器位于企业网络中,则Azure Pipelines可能无法联系你的 TeamCity 服务器。 在这种情况下,可以通过设置可访问 TeamCity 服务器的本地代理,将Azure Pipelines与 TeamCity 集成。 链接到生成时,将无法看到 TeamCity 项目的名称,但你可以在链接对话框字段中键入此名称。

项目源 - 自定义项目

除了内置项目源之外,Azure Artifacts还支持将任何自定义项目源与项目扩展性模型集成。 可以插入任何自定义项目源,Azure DevOps将提供一流的用户体验和无缝集成。

有关详细信息,请参阅Azure DevOps项目扩展性模型

项目源 - 其他源

项目可能由其他类型的源(例如NuGet存储库)创建和公开。 虽然我们继续扩展Azure Pipelines中支持的项目源的类型,但你可以开始使用它,而无需等待对特定源类型的支持。 只需跳过发布管道中项目源的链接,并将自定义任务添加到直接从源下载项目的阶段。

项目源别名

为了确保每个项目下载的唯一性,链接到发布管道的每个项目源会自动提供一个称为 源别名的特定下载位置。 可以通过变量访问此位置:

$(System.DefaultWorkingDirectory)\[source alias]

这种唯一性还可确保,如果以后在其原始位置重命名链接项目源 (例如,重命名Azure Pipelines中的生成管道或 Jenkins) 中的项目,则无需编辑任务属性,因为代理中定义的下载位置不会更改。

默认情况下,源别名是链接项目源时选择的源名称,前缀为下划线;根据项目源的类型,这将是生成管道、作业、项目或存储库的名称。 可以从发布管道的项目选项卡编辑源别名;例如,更改生成管道的名称,并且想要使用反映生成管道名称的源别名。

主源

将多个项目源链接到发布管道时,其中一个将指定为主要项目源。 主项目源用于设置多个预定义 变量。 它还可用于 命名版本

项目下载

将发布部署到阶段时,每个源中的版本控制项目默认下载到自动化代理,以便在该阶段中运行的任务可以部署这些项目。 在发布完成后,不会删除下载到代理的项目。 但是,启动下一个版本时,将删除下载的项目,并将其替换为新的项目集。

启动发布时,代理中会为每个发布管道创建一个新的唯一文件夹,项目将下载到该文件夹中。 变量 $(System.DefaultWorkingDirectory) 映射到此文件夹。

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

但是,如果需要,可以指示Azure Pipelines将项目自动下载到代理以执行部署的特定作业和阶段。 通常,当该作业中的任务不需要任何项目时,或者如果在任务中实现自定义代码来下载所需的项目,则执行此操作。

但是,在Azure Pipelines中,可以选择要下载到代理中的特定作业和部署阶段的项目。 通常,当该作业中的任务不需要所有或任何项目时,或者如果在任务中实现自定义代码来下载所需的项目,则执行此操作可提高部署管道的效率。

Selecting the artifacts to download

项目变量

Azure Pipelines公开一组可在任务和脚本中访问和使用的预定义变量;例如,在部署作业中执行 PowerShell 脚本时。 如果有多个项目源链接到发布管道,则可以访问其中每个项目的相关信息。 有关所有预定义项目变量的列表,请参阅 变量

其他信息

帮助和支持