经典发布管道中的工件源

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

通过经典发布管道,可以从各种源部署工件。 使用图形界面,可以设置管道以集成和使用来自各种服务的工件。 此外,还可以链接来自不同源的多个工件,并根据需要指定其中一个为主要源。

工件源

Azure Pipelines 支持多种存储库、服务和 CI/CD 平台。 创建发布时,可以指定工件源的版本。 默认情况下,发布使用最新版本的源工件。 你还可以通过指定标记、特定版本来选择使用来自特定分支的最新生成,或者允许用户在创建发布时指定版本。

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

如果链接多个工件,则可以指定哪个工件是主要源(默认)。 主要工件源用于设置几个预定义的变量,也可用于命名版本

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

默认版本下拉列表取决于链接的生成定义的源类型。 所有存储库类型都支持选项 Specify at the time of release creationSpecific versionLatest。 但是,XAML 生成定义不支持 Latest from the build pipeline default branch with tags

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

注意

使用多个工件源时,不支持通过映射工件源来触发特定阶段。 如果需要此功能,Azure Pipelines 建议将发布管道拆分为多个发布。

Azure Pipelines

可以将经典发布管道链接到任何管道工件。 此外,可以链接多个工件并在多个生成源上设置部署触发器。 每次有新版本可用时,此设置都会创建一个版本。 将 Azure Pipelines 用作工件源时,可以使用以下功能:

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

注意

要在经典管道中发布管道工件,必须向管道添加 PublishPipelineArtifact 任务。 在 YAML 管道中,drop 工件会被隐式发布。

限制作业授权范围

默认情况下,发布会以组织级工作授权范围运行,允许他们访问组织内所有项目的资源。 这在链接其他项目中的管道工件时很有用。 要限制对项目工件的访问,可以在项目设置中启用“将工作授权范围限制为发布管道的当前”。

设置组织的工作授权范围

  1. 登录到你的 Azure DevOps 组织。

  2. 选择左下方的“组织设置”。

  3. 选择管道> *设置

  4. 打开“对于发布管道,将作业授权范围限制为当前项目”开关,以将范围限制为当前项目。 建议这样做是为了提高安全性。

    显示如何为组织设置作业授权范围的屏幕截图。

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

  1. 登录到 Azure DevOps 组织,并导航到你的项目。

  2. 选择左下方的“项目设置”。

  3. 选择管道> *设置

  4. 打开“对于发布管道,将作业授权范围限制为当前项目”开关,以将范围限制为当前项目。 建议使用此设置来增强管道的安全性。

    显示如何为项目设置作业授权范围的屏幕截图。

注意

如果范围是在组织层面设定的,就不能在每个项目中单独更改。

注意

默认情况下,发布会以集合级工作授权范围运行,允许它们访问集合中所有项目的资源。

Azure Repos、GitHub 和 TFVC

在某些情况下,你可能希望直接从不同的源控制中获取工件,而无需通过生成管道。 例如:

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

  • 在不同的版本控制库中管理不同阶段的配置,并作为部署管道的一部分直接使用这些配置文件。

  • 将基础结构和配置作为版本控制库中的代码进行管理。

使用 Azure Pipelines,可以在单个发布管道中配置多个工件源。 这样就可以将生成应用程序二进制文件的生成管道与存储配置文件的版本控制库连接起来,在部署过程中同时使用这两个工件。

Azure Pipelines 支持 Azure Repos、Team Foundation Version Control (TFVC) 和 GitHub 存储库。 只要有读取权限,就可以将发布管道链接到项目集中的任何 Git 或 TFVC 存储库。 在同一集合中部署版本控制工件时,无需进行其他设置。

链接 GitHub 存储库并选择分支时,可以在保存工件后编辑工件类型的默认属性。 如果稳定版本分支发生变化,这将非常有用,可确保持续交付版本使用正确的分支来处理较新的工件版本。 还可以指定检出详细信息,例如子模块Git-LFS 跟踪文件包含,以及浅层提取深度

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

使用 Azure Repos、Git 和 TFVC 作为工件源时,可以使用以下功能:

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

注意

默认情况下,发布会以组织级工作授权范围运行,允许他们访问组织内所有项目的资源。 这在链接其他项目中的管道工件时很有用。 要限制对项目工件的访问,可以在项目设置中启用“将工作授权范围限制为发布管道的当前项目”。

注意

默认情况下,发布会以集合级工作授权范围运行,允许它们访问集合中所有项目的资源。 这在链接其他项目中的管道工件时很有用。 要限制对项目工件的访问,可以在项目设置中启用“将工作授权范围限制为发布管道的当前项目”。

Azure Artifacts

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

  • 应用程序二进制文件将发布到 Azure Artifacts,而且你希望在发布管道中使用包。

  • 需要将其他包存储在 Azure Artifacts 中,作为部署工作流的一部分。

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

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

功能 说明
自动触发发布 当新的工件可用时(包括 XAML 生成),可以自动创建新发布。 有关更多详细信息,请参阅发布触发器
工件变量 经典版本中引用的工件支持许多工件变量
工作项和提交 链接工作工件,查看它们在版本详细信息中的显示。 使用 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 个快照。

Azure 容器存储库和 Docker Hub

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

将 Azure 容器存储库或 Docker Hub 用作工件源时,可使用以下功能:

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

Jenkins

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

由 Jenkins 生成所产生的工件通常会传播到存储库进行存档和共享。 Azure Blob 存储就是这样一个存储库,它允许将发布到 Azure 存储的 Jenkins 项目用作发布管道中的工件源。 Azure Pipelines 会自动将工件从 Azure 下载到运行管道的代理。 在这种情况下,不需要代理与 Jenkins 服务器之间的连接,也可以使用 Microsoft 托管的代理,而无需将 Jenkins 服务器暴露在 Internet 上。

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

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

注意

如果 Jenkins 服务器位于企业专用网络内,Azure Pipelines 可能无法 ping 到该服务器。 在这种情况下,可以通过设置可访问 Jenkins 服务器的内部代理,将 Azure Pipelines 与 Jenkins 集成。 虽然在链接到管道时可能看不到 Jenkins 项目的名称,但可以在 URL 文本字段中手动输入项目名称。

对象源别名

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

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

默认情况下,源别名是以下划线为前缀的工件源名称(例如 _mslearn-tailspin-spacegame-web)。 根据工件源类型,源别名可以与生成管道名称、作业名称、项目名称或资源库名称相对应。 可以从发布 pipeline.m 的“工件”选项卡中的工件选项卡编辑源别名,该选项卡是发布管道的工件选项卡。

工件下载

当阶段部署完成后,每个源的版本化工件都会下载到管道代理,以便该阶段的任务可以访问它们。 发布完成后,这些下载的工件不会被删除。 但是,当启动新版本时,以前的工件会被删除,并用新的工件取代。

启动发布时,会在代理上为每个发布管道创建一个唯一的文件夹,并将工件下载到该文件夹:$(System.DefaultWorkingDirectory)

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

要跳过自动工件下载,请导航到发布管道>任务>代理任务>工件下载,然后取消选中所有工件工件或指定要跳过的特定工件。

显示如何在 Azure DevOps Services 的经典发布管道中跳过自动工件下载的屏幕截图。

要跳过自动工件下载,请导航至发布管道>任务>代理任务>附加选项,然后选中跳过工件下载复选框。

显示如何在 Azure DevOps Server 的经典发布管道中跳过自动工件下载的屏幕截图。