【问题标题】:Can one build pipeline send a value as a parameter to the next pipeline it triggers in Azure DevOps一个构建管道能否将值作为参数发送到它在 Azure DevOps 中触发的下一个管道
【发布时间】:2019-11-19 16:31:03
【问题描述】:

我有一个构建管道,假设 A - 在文件夹中存储一个文件(该文件具有在该构建管道中设置的变量值)。此管道 A 触发另一个管道 B,该管道 B 使用发布工件任务将文件夹发布为工件。但是文件夹名称是动态的,因为它是从管道 A 中的该文件中获取的。我需要在触发时将具有该变量值的文件从管道 A 传递到管道 B。有没有办法在 Azure DevOps 中做到这一点,而不使用 yaml 管道?

我使用经典模式设置了一些复杂的管道,将它们全部转换为 yaml 需要很长时间,所以想知道是否有任何解决方法。

【问题讨论】:

  • 如何从 A 触发管道 B?
  • 通过在 Pipeline B 的 Triggers (Build Completion) 部分下添加 Pipeline A。
  • Shayki 的解决方案/解决方法是更好的方法。试了有什么效果?
  • 我所做的是,在管道 B 中创建一个变量。我尝试从管道 A 发送变量的值,方法是使用 REST API 调用将此变量作为参数对管道 B 进行排队。

标签: variables azure-devops azure-pipelines


【解决方案1】:

有几种解决方法:

  1. 创建一个变量组,在Pipeline A期间用Rest API设置变量值,然后Pipeline B使用这个变量。

  2. 在管道 A 期间,使用 Rest API 的新值更新管道 B 定义。

  3. 在管道 A 中使用 Trigger Build Task 触发管道 B,您可以将变量值传递给管道 B(您可以在“构建参数”字段中执行此操作)。

【讨论】:

  • 我无权访问您提到的触发器构建任务,但我所做的是在管道 B 中创建一个变量。我试图从管道 A 发送变量的值,通过使用 REST API 调用将此变量作为参数对管道 B 进行排队。但是我被困在 curl 命令中。 :( 出于某种原因,我无法在请求正文中发送参数对象。它只接受构建定义。
【解决方案2】:

如果您需要通过在管道 B 的触发器部分下添加管道 A 来触发构建,我认为没有一种干净的方法可以做到这一点。

考虑在流水线 A 使用 REST API 完成时触发流水线 B。这样,您可以将“文件路径”作为管道 B 上的变量,并将其传递到 parameters 集合中。

类似:

POST https://dev.azure.com/{organization}/{project}/_apis/build/builds?ignoreWarnings={ignoreWarnings}&checkInTicket={checkInTicket}&sourceBuildId={sourceBuildId}&api-version=5.0

{
    "definition": {
        "id": 1234
    },
    "parameters": "{\"fileName\":\"yourfilename\"}"
}
  • filePath 将是管道 B 中变量的名称

查看Builds - Queue 文档了解更多信息。

【讨论】:

  • 是的,我支持这一点,我认为除了用一些变量强制触发其他构建或从已启动构建发送 api 请求以获取有关已完成构建的一些数据之外,您真的不能这样做
  • 为什么不使用像 Azure 逻辑应用这样的编排器?
  • 谢谢,我只是想告诉所有将要检查这个问题的人,上面的解决方案是我实施的,而且效果很好。
猜你喜欢
  • 2021-01-13
  • 1970-01-01
  • 2022-07-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2022-10-14
相关资源
最近更新 更多