1

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

我可以限制多分支管道项目中的构建,以便每个功能分支的作业顺序运行而不是并行运行吗?

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


编辑:情况和问题:

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

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

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

4

2 回答 2

1

我在其他答案中读到的内容,该命令仅防止在同一分支上进行disableConcurrentBuilds多个构建。

如果您希望一次只运行一个构建,请转到运行应用程序的特定 VM 的 Nodes/Build Executor 配置,将 executor 的数量减少到 1 并配置节点标签,以便只有来自您的作业多分支管道可以在该 VM 上运行。

我的项目有严格的内存、许可和存储限制,因此通过此设置,主分支和功能分支上的所有作业都会启动,但一次只能运行一个,直到执行器可用。

于 2019-05-15T20:32:02.423 回答
0

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

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

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

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

  // continue your pipeline ... 

}

解决方案来自这个 SO answer

于 2017-12-20T21:06:36.257 回答