如何在Multibranch Project顺序而不是并行

时间:2017-02-16 16:14:54

标签: jenkins multibranch-pipeline

我在Jenkins中配置了一个multibranch-pipeline项目。这个项目在我的所有功能分支(git)上运行集成测试。对于管道项目中的每个作业,它创建一个我的webapp实例(启动tomcat和其他依赖项)。由于端口绑定问题,这会导致许多损坏的作业。

我是否可以限制multibranch-pipeline项目中的构建,以便每个功能分支的作业按顺序而不是并行运行?

或者是否有更优雅的解决方案?

编辑: 情况和问题:

  • 我想在Jenkins有一个multibranch管道项目(因为我在git中有很多功能分支)
  • 从multibranch管道(对于git中的每个功能分支)创建的作业并行运行
    • 轮询scm是在午夜(x分支的提交是新的,因此相关的工作在午夜开始)
  • 每个作业都启动了我的webapp(和其他依赖项)的一个实例,它绑定到某些端口

问题是,午夜可以开始许多这些工作。每个作业都会尝试启动我的webapp实例。第一份工作可以毫无问题地启动webapp。第二个作业无法启动webapp,因为端口已从第一个实例中获取。

我不想为我的git存储库中的每个功能分支配置新的端口绑定。我需要一个解决方案来限制multibranch管道中的构建,这样只有“feature”才能同时运行。

2 个答案:

答案 0 :(得分:1)

最优雅的解决方案是使您的集成测试能够同时运行。

一种解决方案是使用带动态端口的嵌入式tomcat。这样,每个作业实例都将在具有不同端口的tomcat中运行。 这也是比依赖外部服务器更好的解决方案。

如果这工作太多,您可以随时在“jenkinsfile”管道中使用以下代码:

node {
  // This limits build concurrency to 1 per branch
  properties([disableConcurrentBuilds()])

  // continue your pipeline ... 

}

解决方案来自this SO answer

答案 1 :(得分:0)

what I've read in other answersdisableConcurrentBuilds命令只能阻止在同一分支上的多个构建

如果您一次只运行一个构建,期间,请为您的应用所运行的特定VM转到“节点/构建执行器”配置,将执行器的数量降至1,然后配置节点标签,以便只有多分支管道中的作业才能在该VM上运行。

我的项目具有严格的内存,许可和存储限制,因此使用此设置,主分支和功能分支上的所有作业都将启动,但是一次只能运行一个,直到执行者可用为止。