【问题标题】:Jenkins Pipeline: multiple jenkins instances詹金斯管道:多个詹金斯实例
【发布时间】:2016-10-10 09:26:24
【问题描述】:

我是管道插件的新手。在我的环境中,我们设置了多个团队和多个 jenkins 实例。我喜欢管道工作需要成为“*”的事实。 但是,我能找到的大多数示例都依赖于所有作业都配置在同一个 jenkins 实例上。 如果我的作业在不同的机器上怎么办?

一个简单的 webhook curl 会触发外部机器上的作业,但不会返回任何关于状态的反馈?

这是我的示例管道配置:

echo 'start Pipeline'

stage 'Build'
    build job: 'build'

stage 'Package tests'
    build job: 'test' # <-- this is on another jenkins server

stage 'Deploy'
    build job: 'deploy'

【问题讨论】:

    标签: jenkins jenkins-plugins remote-access jenkins-pipeline


    【解决方案1】:

    在“测试”的作业配置中,您应该能够通过“限制此项目可以运行的位置”为作业设置所需的标签。然后该作业应自动在具有相应匹配标签的 Jenkins 从站上运行。

    如果您想手动控制作业应该在哪个节点上运行,那么您必须使用NodeLabel Parameter Plugin。另请参阅此相关answer on SO 或此相关Jenkins issue

    更新

    如果您想在远程主机(即不是从机)上触发作业,您可以使用远程访问 API 或 Parameterized Remote Trigger Plugin

    【讨论】:

    • 我所指的“测试”工作在不同的詹金斯实例(不同的网址)上是已知的。我认为你在这里描述的是在不同的奴隶上运行这项工作。 afaik,我将不得不使用remote access :(
    • 好吧,我当时误解了用例。我已经更新了上面的答案,包括通过插件远程执行作业的选项。
    • 我不认为远程触发器也监视它?那么我的管道如何知道如何在远程作业结束之前不进入下一个“阶段”?
    【解决方案2】:

    我没有得到令人满意的尝试答案,但通过进行更多的重新布线并将所有作业定义分阶段放入 Jenkinsfile(没有 build job ...)并在其自己的容器中运行整个构建来解决它(vs每个步骤的专用容器)。

    我认为这是我想要完成的更好的做法。 我很高兴我的整个管道最终得到了简化。

    【讨论】: