一尘不染

将管道的各个部分作为单独的作业运行

jenkins

我们正在考虑将Jenkins
Pipeline插件用于一个相当复杂的项目,该项目由多个交付组成,这些交付需要在合并之前使用不同的工具(在不同的机器上)构建。尽管如此,使用单个进行完整的构建似乎很容易Jenkinsfile,而且我喜欢Pipeline随附的git分支的自动发现。

但是,在这一点上,我们为每个交货都有工作,并使用基于构建流的“元”工作来协调各个工作。这样做的好处是,如果只进行了很小的更改,它也允许仅开始一项单独的工作,以查看此交付是否仍然可以编译。

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

  • 在顶层使用不同的Jenkinsfiles进行交付;似乎Multibranch Pipeline作业不允许配置要使用的(https://issues.jenkins-ci.org/browse/JENKINS-35415),但是,为各个交货创建作业仍处于打开状态。load``Jenkinsfile``Jenkinsfile
  • 为“顶层”作业提供配置选项,并if为中的所有交付提供,Jenkinsfile以便能够选择应构建的交付。但是,这将在一个管道中混合使用不同的构建类型,并且至少会弄乱构建时间的估计。

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


阅读 217

收藏
2020-07-25

共1个答案

一尘不染

您可以做的是编写一个流水线脚本,该脚本在单个阶段周围具有“ 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
}

然后,您可以通过将参数“ theStage”设置为“
all”来使用该脚本并立即运行所有阶段的“主要”作业。当所有阶段同时运行时,此作业将收集统计信息,并为您提供有用的估计时间。

此外,您可以使用该脚本创建一个“部分运行”作业,并根据您要运行的阶段对其进行参数设置。但是,该估算将不是很有用。

请注意,正如Martin Ba所建议的,我将阶段本身放到了主脚本中,并且仅将执行代码放到了条件脚本中。这样可以确保工作的可视化更加可靠

2020-07-25