jenkins 如何在多分支项目中顺序而不是并行运行作业

ojsjcaue  于 11个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(129)

我在Jenkins中配置了一个多分支管道项目。这个项目在我所有的功能分支(git)上运行集成测试。对于管道项目中的每个作业,它都会创建一个我的webapp示例(启动tomcat和其他依赖项)。由于端口绑定问题,这会导致许多中断的作业。
我是否可以限制多分支管道项目中的构建,以便每个功能分支的作业顺序运行而不是并行运行?
或者有更好的解决办法?
编辑:情况和问题:

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

问题是,这些工作中有许多可以在午夜开始。每个作业都会尝试启动我的webapp示例。第一个作业可以毫无问题地启动Web应用程序。第二个作业无法启动webapp,因为端口已从第一个示例中获取。
我不想为git仓库中的每个功能分支配置新的端口绑定。我需要一个解决方案来限制多分支管道中的构建,以便只有一个“功能”可以并发运行。

brjng4g3

brjng4g31#

what I've read in other answers中,disableConcurrentBuilds命令仅防止在同一分支 * 上进行多个构建 *。
如果您希望一次只运行一个构建,period,请转到应用运行所在的特定VM的Nodes/Build Executor配置,将执行程序的数量降至1,并配置节点标签,以便只有来自多分支管道的作业可以在该VM上运行。
我的项目有严格的内存、许可和存储限制,因此在这种设置下,master和feature分支上的所有作业都将启动,但在执行器可用之前,一次只能运行一个作业。

cbwuti44

cbwuti442#

最优雅的解决方案是使您的集成测试能够并发运行。
一种解决方案是使用带有动态端口的嵌入式tomcat。这样,每个作业示例将在tomcat中运行不同的端口。这也是比依赖外部服务器更好的解决方案。
如果这是太多的工作,你可以在你的“jenkinsfile”管道中使用以下代码:

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

  // continue your pipeline ... 

}

解决方案来自this SO answer

相关问题