繁体   English   中英

从 Azure DevOps Pipeline 祖父 Pipeline 下载工件

[英]Download artifact from Azure DevOps Pipeline grandparent Pipeline

给定 3 个 Azure DevOps Pipelines(可能存在更多),如下:

  1. 构建、单元测试、发布工件
  2. 部署登台、集成测试
  3. 部署生产,冒烟测试

如何确保 Pipeline 3 下载 Pipeline 1 中发布的特定工件?

我看到的挑战是任务DownloadPipelineArtifact@2仅在工件来自前一个管道的情况下才提供执行此操作的方法。 通过使用以下管道任务:

- task: DownloadPipelineArtifact@2
  inputs:
    buildType: 'specific'
    project: '$(System.TeamProjectId)'
    definition: 1
    specificBuildWithTriggering: true
    buildVersionToDownload: 'latest'
    artifactName: 'example.zip'

这适用于父母“触发管道”,但不适用于祖父母。 相反,它返回错误消息:

工件示例.zip 未找到构建 nnn。

其中 nnn 是直接前任的运行 ID,就像我指定了pipelineId: $(Build.TriggeredBy.BuildId) 实际上,Pipeline 3 尝试从 Pipeline 2 中检索 Pipeline 1 工件。如果该definition: 1行做了一些事情,那就太好了,但是,当设置了specificBuildWithTriggering: true时,它似乎什么都不做。

请注意buildType: 'latest'不安全; 如果在管道 2 运行时从管道 1 发出,它似乎允许发布未经测试的工件。

使用DownloadPipelineArtifact@2可能无法完成此操作。 很难确定,因为文档没有太多细节。 也许还有另一种合理的方式来实现这一点......我想在每个中间管道上发布工件的另一个副本,即使是那些不使用它的管道,是一种方式,但不是很合理。 我们可以通过发布一个记录了 BuildId 的工件来消除创建二进制文件副本的丑陋方面,但我们仍然必须从每个管道中检索并重新发布它。

如果有办法识别原始 CI 触发器,例如找到启动 GIT 提交的 hash,我可以使用它来命名和引用工件。 Build.SourceVersion在触发的构建之间是否保持不变? 任何其他“启动 ID”都可以正常工作。

欢迎您对示例管道场景发表评论,因为我实际上正在使用它,但这不是我的问题的重点。 我认为这个问题是广泛适用的,因为它将适用于构建依赖包时,或者出于“触发器”有用的任何其他原因。

一位MS 代表建议为此使用 REST 例如:

HTTP GET https://dev.azure.com/ORGNAME/PROJECTGUID/_apis/build/Builds/2536

-

{
    "id": 2536,
    "definition": {
        "id": 17
    },
    "triggeredByBuild": {
        "id": 2535,
        "definition": {
            "id": 10
        }
    }
}

通过走父母,可以找到具有所需定义ID(例如10)的祖先。 然后它的运行 ID(例如 2535)可用于下载工件。

@merlin-liang-msft 针对与@sschmeck 不同的要求提出了类似的流程,他们的答案附有代码。

有一些扩展可以让你做到这一点,但官方的解决方案是使用多级管道而不是 3 个独立的管道。

一种方法是使用发布管道(您不能在 YAML 中对其进行编码/编辑),但您可以在整个部署过程中使用相同的工件。

发布管道

您还可以指定启动部署所需的触发器

批准和触发器

或者,存在预览中的多阶段管道。( https://devblogs.microsoft.com/devops/whats-new-with-azure-pipelines/ )。 您可以通过在“预览功能”中启用它来访问它。

你为什么不 output 一些带有元信息的管道工件,并将它们连接到前面的管道中。

祖父母 > 关于 pipe 的元数据

ETC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM