gpt4 book ai didi

azure-devops - 从 Azure DevOps Pipeline 祖父 Pipeline 下载工件

转载 作者:行者123 更新时间:2023-12-04 02:43:11 25 4
gpt4 key购买 nike

给定 3 个 Azure DevOps 管道(可能存在更多),如下所示:

  • 构建、单元测试、发布工件
  • 部署暂存、集成测试
  • 部署生产,烟雾测试

  • 如何确保流水线 3 下载流水线 1 中发布的特定工件?

    我所看到的挑战是任务 DownloadPipelineArtifact@2如果工件来自前一个管道,则仅提供一种方法来执行此操作。通过使用以下管道任务:
    - task: DownloadPipelineArtifact@2
    inputs:
    buildType: 'specific'
    project: '$(System.TeamProjectId)'
    definition: 1
    specificBuildWithTriggering: true
    buildVersionToDownload: 'latest'
    artifactName: 'example.zip'

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

    Artifact example.zip was not found for build nnn.



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

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

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

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

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

    最佳答案

    MS representative suggested using REST为了这。例如:

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

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

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

    @merlin-liang-msft 建议 a similar process对于来自@sschmeck 的不同要求,他们的回答有随附的代码。

    关于azure-devops - 从 Azure DevOps Pipeline 祖父 Pipeline 下载工件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365421/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com