我在Jenkins中配置了一个multibranch-pipeline项目。这个项目在我的所有功能分支(git)上运行集成测试。对于管道项目中的每个作业,它创建一个我的webapp实例(启动tomcat和其他依赖项)。由于端口绑定问题,这会导致许多损坏的作业。
我是否可以限制multibranch-pipeline项目中的构建,以便每个功能分支的作业按顺序而不是并行运行?
或者是否有更优雅的解决方案?
编辑: 情况和问题:
问题是,午夜可以开始许多这些工作。每个作业都会尝试启动我的webapp实例。第一份工作可以毫无问题地启动webapp。第二个作业无法启动webapp,因为端口已从第一个实例中获取。
我不想为我的git存储库中的每个功能分支配置新的端口绑定。我需要一个解决方案来限制multibranch管道中的构建,这样只有“feature”才能同时运行。
答案 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 answers的disableConcurrentBuilds
命令只能阻止在同一分支上的多个构建 。
如果您一次只运行一个构建,期间,请为您的应用所运行的特定VM转到“节点/构建执行器”配置,将执行器的数量降至1,然后配置节点标签,以便只有多分支管道中的作业才能在该VM上运行。
我的项目具有严格的内存,许可和存储限制,因此使用此设置,主分支和功能分支上的所有作业都将启动,但是一次只能运行一个,直到执行者可用为止。