【问题标题】:How to trigger build on multiple platforms using Jenkins pipeline?如何使用 Jenkins 管道在多个平台上触发构建?
【发布时间】:2019-01-02 08:03:14
【问题描述】:

我想在“hyp-z”和“hyp-x”构建节点上触发 Jenkins 作业。我试着这样写,但得到“没有标签为‘hyp-x&&hyp-z’的节点”

  node ('hyp-z&&hyp-x') {
   // write something here
  }

我做错了什么,确切的工作格式是什么?

【问题讨论】:

    标签: jenkins build jenkins-pipeline jenkins-job-builder


    【解决方案1】:

    我尝试了两种方法

    def labels = ["hyp-x", "hyp-z"]
    def builders = [:]
    for (x in labels) {
        def label = x
        builders[label] = {
            node(label) {
                // build script
            }
        }
    }
    parallel builders
    

    上面的代码在 Jenkinsfile 中按预期工作,但我看到两个构建都是在一个常见的工作中触发的,并且日志看起来很笨拙。所以我尝试了下面的第二种方法

    创建了Jenkinsfile.xJenkinsfile.z,每个文件代表x和z平台构建。

    【讨论】:

      【解决方案2】:

      这在这种形式中是不可能的。 && 表达式用于缩小某些功能的节点池。 例如我想在标签为 UBUNTU 和 DOCKER 的节点上运行。 而不是在具有这些标签的两个不同节点上运行。

      您可以使用并行块来做您想做的事。 如果您使用的是声明式语法,请参阅这篇文章 https://jenkins.io/blog/2017/09/25/declarative-1/ 或这里为脚本 https://jenkins.io/doc/book/pipeline/jenkinsfile/#parallel-execution

      【讨论】:

      • 感谢@apr_1985 的快速回复。在我的场景中,我想在 z 和 x 平台上运行所有阶段。您能否建议我执行此流程的脚本。提前致谢
      • 我认为对于这种情况,您唯一可以轻松做的就是将所有阶段定义为单独的方法,然后管道将是许多并行阶段,它们只是在节点块中调用相同的方法。
      • 最后我在下面添加了代码 sn-p 以使其工作.. def labels = ['hyp-x', 'hyp-z'] def builders = [:] for (x in labels ) { def label = x builders[label] = { node(label) { // build script } } } 这对我来说效果很好..但是我在一个共同的工作中看到了两个平台的日志输出..有没有办法把它分成两个工作?
      • 使用蓝海插件可以更轻松地分离不同的日志。或者您使用“管道步骤”链接。你会习惯的 :) 你能把代码 sn-p 添加到你的问题中作为解决方案吗?
      • @JoergS 我尝试添加的两种方法作为答案。我将采用第二种方法(为每个平台创建两个 Jenkinsfile)
      猜你喜欢
      • 2018-02-20
      • 2017-03-30
      • 2022-08-24
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多