【问题标题】:Jenkins How to find the build number of the upstream build from downstream詹金斯如何从下游找到上游构建的内部版本号
【发布时间】:2015-07-31 09:21:25
【问题描述】:

我在 Jenkins 有两份工作:

  1. 作业 A:构建源代码 + 运行单元测试,由 SCM 更改触发。这很快。它本身不会触发任何东西

  2. 工作 B:构建安装程序。这需要一些时间。它是通过监视作业 A 的成功构建(“在构建其他项目后构建”)触发的。 它使用来自作业 A 的工件。

可能会在运行作业 B 的单次运行时启动多个作业 A 构建。

Job A #1 -> triggers Job B #1
                  |
Job A #2          |
                  |
Job A #3  -.      ` Job B #1 finishes
            `-> triggers Job B #2
Job A #4          |
                  |
Job A #5          |
 |                ` Job B #2 finishes
  `-----------> triggers job B #3

我的问题是:如何确定 A 的构建号触发了 B 的某个构建号,所以在作业 B 中我可以从作业 A 的确切构建中复制工件?

“复制工件”插件允许指定特定的内部版本号,但我从哪里获得它?

【问题讨论】:

  • 我认为您也应该能够使用另一种方法。您可能可以使用 groovy 找到关于上游构建的最后一个构建号,将其递增,并将该值分配给动态参数。这意味着它将是在构建队列中生成的数字,只要它被转发到下游,在需要引用它时应该保持不变。
  • 我需要换一种方式。我需要将下游作业的内部版本号传递给上游作业。知道怎么做吗?

标签: jenkins continuous-integration


【解决方案1】:

执行此操作的最省力且成本最低的方法之一: 您可以使用Parametrized Build pluginA ${BUILD_NUMBER} 环境变量传递给B。例如,在 B 中定义PARENT_BUILD_NUMBER 变量并将PARENT_BUILD_NUMBER=$BUILD_NUMBERA 传递到B

【讨论】:

    【解决方案2】:

    当然,选项就在 Copy Artifact 插件中...

    【讨论】:

    • 虽然这看起来是您为您找到的完美解决方案,但我可以补充一点,您可以使用 wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build 将“A”${BUILD_NUMBER} 环境变量传递给“B”。只是下游作业调用的 PARENT_BUILD_NUMBER 参数。
    • @Zloj 你应该让你的评论成为答案。它回答了我的问题,因为我的关联工作没有使用人工制品。
    • @PatrickB。完毕。当我离开评论时,一定很着急。我几乎无法理解我自己写的内容:D
    【解决方案3】:

    这对我有用,而无需使用使用 curl/ruby 的插件。您可能需要生成一个 API 密钥并将其传递给 auth。

    require 'rubygems'
    require 'json'
    
    info = `curl -qs http://localhost:8080/job/#{ENV['JOB_NAME']}/#{ENV['BUILD_NUMBER']}/api/json`
    
    puts JSON.parse(info)['actions'].first['causes'].first['upstreamBuild']
    

    查看信息,它包含上游作业所需的所有信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 2014-01-21
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多