将管道的某些部分作为单独的作业运行

rai*_*ner 8 jenkins jenkins-workflow jenkins-pipeline

我们正在考虑将Jenkins Pipeline插件用于一个相当复杂的项目,该项目包含几个需要在合并之前使用不同工具(在不同机器上)构建的交付.尽管如此,使用单个数据进行完整构建似乎很容易Jenkinsfile,我喜欢自动发现管道附带的git分支.

但是,此时,我们为每个交付都有工作,并使用基于构建流程的"元"工作来协调各个工作.关于这一点的好处是,如果只做了很小的改动,它还允许只启动一个单独的工作,只是为了看看这个交付是否仍在编译.

为了模仿这一点,我想到了一些想法:

  • 使用不同的Jenkinsfiles进行交付,load并将它们放在顶层Jenkinsfile; 似乎Multibranch Pipeline作业不允许配置Jenkinsfile使用(https://issues.jenkins-ci.org/browse/JENKINS-35415),因此,为单个交付创建作业仍然是开放的.
  • 为"顶级"作业提供配置选项,并if为所有交付提供s,Jenkinsfile以便能够选择应该构建哪些.但是,这会在一个管道中混合不同的构建类型,并且至少会弄乱构建时间的估计.

那些可行的选择,还是有更好的选择?

ole*_*enz 6

您可以做的是编写一个流水线脚本,该脚本在单个阶段具有"if"保护,如下所示:

stage "s1"
if (theStage in ["s1","all"]) {
    sleep 2
}

stage "s2"
if (theStage in ["s2", "all"]) {
    sleep 2
}

stage "s3"
if (theStage in ["s3", "all"]) {
    sleep 2
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以创建一个使用此脚本的"主"作业,并通过将参数"theStage"设置为"all"来一次运行所有阶段.这项工作将在所有阶段一次运行时收集统计数据,并为您提供有用的估算时间.

此外,您可以创建一个使用此脚本的"部分运行"作业,并使用您要运行的阶段进行参数化.但估计不会很有用.

请注意,我将舞台本身放在主脚本中,并将执行代码放入条件中,如Martin Ba所建议的那样.这可确保作业的可视化更可靠