从许多其他作业中调用一个参数化的作业(又称为“模板”)-这是可行的方法吗?

时间:2018-12-12 20:21:23

标签: jenkins jenkins-pipeline

我有这样的工作

  • template__build_docker
  • build_dockerA
  • build_dockerB ...
  • build_dockerX

template__build_docker是参数化工作,例如:

node {
   [string(name: 'docker_name', trim: true)]

   ... build the container - git clone, etc ...
}

每个build_dockerA,build_dockerB ...执行此操作

stage('call build template'){
   build job: 'template__build_docker ',  parameters: [string(name: 'docker_name', value: 'MyDockerImageA')]                                  
}

我知道这有点笨拙,而且使用声明性管道我可以使用主管道(不研究细节),但这就是我正在使用的东西。

问题:这是可行的方法还是对此有任何担忧,会使其成为实现管道重用/重构的不当方法?

我已经知道一个问题-如果我快速启动一些build_dockerX作业,然后再启动配置的“执行者数量”,那么我就会陷入僵局-这些作业无法启动模板作业,因为没有执行者可用。 >

或者还有其他类似的陷阱吗?

1 个答案:

答案 0 :(得分:2)

答案是肯定的,但是您应该使用shared libraries。看一个写在hereone where there is whole declarative pipeline defined上的简单示例,该示例是从jenkinsfile中使用的。我还记得我在此处发布的question,也可以作为示例。

就“ gothas”而言,我认为仍然不可能从另一个库中加载一个詹金斯库。除此之外,它是完美的。