Jenkins多重依赖项无法正常工作(触发器、先决条件检查)

Jenkins多重依赖项无法正常工作(触发器、先决条件检查),jenkins,Jenkins,问题的背景 我们正在使用jenkins构建许多依赖于某些项目的项目。 正如大多数人所知,jenkins允许您在构建稳定时触发另一个作业(稳定是我们想要的选项)。jenkins中还有另一个工具,允许您“在某些作业正在运行时阻止构建”。还有一个选项是“先决条件检查” 假设有一个项目A触发了项目B,B触发了项目C。为了简单起见,让我将此配置称为A->B->C。假设还有另一条路径,如A->X->C。第一个问题,如果A和B成功构建,即使Y同时构建,C也会被触发。解决方案是使用“如果某些作业正在运行,则阻止

问题的背景

我们正在使用jenkins构建许多依赖于某些项目的项目。 正如大多数人所知,jenkins允许您在构建稳定时触发另一个作业(稳定是我们想要的选项)。jenkins中还有另一个工具,允许您“在某些作业正在运行时阻止构建”。还有一个选项是“先决条件检查”

假设有一个项目A触发了项目B,B触发了项目C。为了简单起见,让我将此配置称为A->B->C。假设还有另一条路径,如A->X->C。第一个问题,如果A和B成功构建,即使Y同时构建,C也会被触发。解决方案是使用“如果某些作业正在运行,则阻止生成”选项。第二个问题是,当A触发B和X时,如果B失败,那么X触发C,而C失败是因为B已经失败了。这是我们不想要的。解决方案(非精确解决方案)是使用“先决条件检查”选项。至少有了这个选项,项目C的负责人可以理解问题并不是因为项目C而发生的。此外,我们必须使用触发器选项才能将这些A->B->C和A->X->C项目相互链接

问题


问题很简单,我们不想使用这三个选项(触发器、先决条件检查、块构建,如果某些作业正在运行),因为这是太多的工作,而且这种复杂的结构很可能会导致许多问题(即忘记链接是最简单的一个)。是否有任何工具可以同时执行其中三项操作?你知道有什么插件可以让我们只用一个链接就能解决这个问题吗?

也许构建流插件就是你想要的:

在那里,您可以编写一个触发现有作业的小脚本,例如:

parallel (
// job 1, 2 and 3 will be scheduled in parallel.
  { build("job1") },
  { build("job2") },
  { build("job3") }
)
// job4 will be triggered after jobs 1, 2 and 3 complete
build("job4")

也许构建流插件就是您想要的:

在那里,您可以编写一个触发现有作业的小脚本,例如:

parallel (
// job 1, 2 and 3 will be scheduled in parallel.
  { build("job1") },
  { build("job2") },
  { build("job3") }
)
// job4 will be triggered after jobs 1, 2 and 3 complete
build("job4")

多任务插件将是你感兴趣的。 这就是文件中所说的

安装此插件后,您将能够执行以下操作:

 When creating new Jenkins job you have an option to create MultiJob project.

 This job can define in the Build section phases that contains one job or more.

 All jobs belong to one phase will be executed in parallel (if there are enough executors on the node)

 All jobs in phase 2 will be executed only after jobs in phase 1 are completed etc.

由于A同时触发B和X,我将使它们并行运行(使它们成为同一阶段的一部分),并仅在两者都完成时触发C。

多任务插件将引起您的兴趣。 这就是文件中所说的

安装此插件后,您将能够执行以下操作:

 When creating new Jenkins job you have an option to create MultiJob project.

 This job can define in the Build section phases that contains one job or more.

 All jobs belong to one phase will be executed in parallel (if there are enough executors on the node)

 All jobs in phase 2 will be executed only after jobs in phase 1 are completed etc.

由于A同时触发B和X,我将使它们并行运行(使它们成为同一阶段的一部分),并仅在两者都完成时触发C。

这似乎是我需要的,但有一个问题:我还希望能够将SCM插件与多作业一起使用。我的意思是,假设我有5个阶段,项目B(第2阶段)已经改变了。因此,SCM检测到您知道的变化,然后触发B。之后,阶段3会自动触发吗?应该是的,但当我尝试时却没有?也许多任务插件只是为了触发所谓的PhaseManager作业,而该作业处理所有事情?那这不是我想要的。(抱歉,如果理解起来如此复杂,请不要犹豫,如果有任何不清楚的地方,请提问)我认为插件的一些操作效果很好。如果其他人需要像我一样进行配置,我也可以告诉他们这些操作。顺便说一句,谢谢你的回答。这似乎是我所需要的,但有一个问题:我还希望能够将SCM插件与multijob一起使用。我的意思是,假设我有5个阶段,项目B(第2阶段)已经改变了。因此,SCM检测到您知道的变化,然后触发B。之后,阶段3会自动触发吗?应该是的,但当我尝试时却没有?也许多任务插件只是为了触发所谓的PhaseManager作业,而该作业处理所有事情?那这不是我想要的。(抱歉,如果理解起来如此复杂,请不要犹豫,如果有任何不清楚的地方,请提问)我认为插件的一些操作效果很好。如果其他人需要像我一样进行配置,我也可以告诉他们这些操作。顺便说一下,谢谢你的回答。