在jenkins中运行两个并行的管道时发生死锁

目前我有以下问题.

我在管道中编写了一个Jenkins文件来构建我的存储库.

每个存储库在Multibranch管道中都有自己的管道.每当我推送存储库时,管道开始工作.

对于建筑物,我有一个具有两个节点的代理.
当Multibranch Pipeline正在运行时,Multibranch Pipeline使用一个节点执行单个Pipeline,第二个节点由当前正在执行的管道用于运行单个Job.

当两个管道同时运行时,两个管道都使用一个节点.但现在问题是,由于所有节点都被占用,因此管道无法启动任何作业.这时我有一个死锁,因为两个管道都在等待一个空闲节点来完成他们的工作.

我试图设置“disableConcurrentBuilds()”,但这只会阻止具有相同名称的管道. Multibranch Pipeline中具有不同名称的管道可以同时运行.

第二个尝试是在Jenkinsfile中使用此代码设置Build Blocker Plugin.

properties([
    [$class: 'BuildBlockerProperty',
     blockLevel: 'GLOBAL',
     blockingJobs: '*pipeline_Test*',
     scanQueueFor: 'ALL',
     useBuildBlocker: true],
   disableConcurrentBuilds()
   ])

但后来我收到此错误消息.

WorkflowScript: 30: Invalid option type “properties”. Valid option
types: [buildDiscarder, catchError, checkoutToSubdirectory,
disableConcurrentBuilds, disableResume, durabilityHint, lock,
newContainerPerStage, overrideIndexTriggers, retry, script,
skipDefaultCheckout, skipStagesAfterUnstable, timeout, waitUntil,
withContext, withCredentials, withEnv, ws] @ line 30, column 4

如何在Jenkinsfile中为整个管道设置BuildBlockerProperty?
有没有其他方法可以阻止所有其他管道这么长时间管道运行?

谢谢你的帮助.

最佳答案 对此最简单的解决方案是将执行程序的数量减少一个,确保您总是有一个执行程序而不是父作业.

这样,总会有一个执行程序空闲或一个子作业运行,这将完成并释放执行程序.

您可以在Manage Jenkins>中设置执行程序.节点> (节点名称)>配置>执行者数量

点赞