发布工件和工件源

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

注意

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

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

项目源-Azure 容器注册表、Docker、Kubernetes

当部署容器化的应用时,首先将容器映像推送到容器注册表。 推送完成后,可以将容器映像部署到用于容器的 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) 。 在部署之前,您可能需要删除旧副本并只保留最新的项目。 在提升的命令提示符下运行以下 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 Marketplace 安装 Azure Pipelines 扩展的TFS 项目。 然后,使用凭据创建服务连接以连接到 TFS 服务器 (参阅 服务连接 以了解详细信息) 。

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

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

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

注意

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

项目源-TeamCity

若要与 TeamCity 集成,你必须首先从 Marketplace 中安装 Azure Pipelines 扩展的TeamCity 项目

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

然后,可以将 TeamCity 生成配置链接到发布管道。 必须使用操作来配置 TeamCity 生成配置,以发布项目。

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

功能 TeamCity 源的行为
自动触发器版本 不能为发布管道中的 TeamCity 源配置持续部署触发器。 若要在生成完成时自动创建新版本,请向 TeamCity 项目添加一个调用 Azure Pipelines REST api 以创建新版本的脚本。
项目变量 TeamCity 支持多个 项目变量
工作项和提交 Azure Pipelines 无法显示 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 脚本时。 如果有多个项目源链接到发布管道,则可以访问其中每个项目的相关信息。 有关所有预定义的项目变量的列表,请参阅 变量

其他信息

帮助和支持

Azure Pipelines | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 - TFS 2015

注意

在 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

重要

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

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

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

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

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

项目源 - Azure Pipelines

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

注意

必须在生成管道Artifacts发布任务。 对于 YAML 生成管道,将隐式发布名称 为 drop 的项目。

不同版本的 TFS 和不同版本之间的功能差异Azure Pipelines有:

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

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

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

功能 源Azure Pipelines行为
自动触发发布 最新发布生成新生成(包括 XAML (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。
  • 打开切换"将作业授权范围限制为当前项目"以将范围限制为项目。 这是建议的设置,因为它增强了管道的安全性。

注意

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

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

项目源 - TFVC、Git 和 GitHub

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

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

  • 你可以管理不同版本控制存储库中各个阶段的配置,并且想要在部署管道中直接从版本控制使用这些配置文件。

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

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

Azure Pipelines TFVC Team Foundation 版本控制 (存储库) 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 生成将下载到代理。 可以在 阶段中配置一个选项 ,以跳过项目的 下载。