我有一个 Jenkins 管道,它使用 2 个节点,每个节点配置为有 3 个执行程序。
有没有办法选择特定的执行器来运行管道/阶段?
我知道可以使用以下方法来选择节点:
管道{ 代理人 { 标签XXX } 阶段{ 阶段(“构建”){ 代理人 { 标签 YYY } ...} }
但是有没有办法选择执行人呢?有没有插件支持这样的功能?
我发现可以使用以下命令来检查执行器是否空闲或忙碌:
def nodeInstance = Jenkins.instance.getNode(nodeName)
def computer = nodeInstance.toComputer()
computer.executors.each { executor ->
def idleState = executor.isIdle()
... }
但没有提及如何挑选它们。
Jenkins 允许配置执行器的数量,以尝试更有效地利用构建代理资源。
来自管理节点:
执行器是用于执行任务的槽。实际上,它是代理中的一个线程。节点上执行程序的数量定义了可以运行的并发任务的数量。换句话说,这决定了可以同时执行的并发 Pipeline 阶段的数量。
所以事实上它是一个相当抽象的实体。 您不应该在管道中选择特定的执行器,因此您不能这样做。
但是,在某些情况下,可以使用对执行者 ID 的引用。
一般来说,同一个节点上有多个执行器会导致资源冲突。假设您在代理上有一个 Maven$HOME/.m2
存储库,并且您所在的团队正在开发 Java 项目。如果您的所有构建都使用相同的存储库,并且其中一些碰巧由不同的执行者在同一代理上构建,那么它们:
-SNAPSHOT
工件,同时从不同的来源构建。
.m2
存储库 - 例如,
$HOME/0/.m2
、
$HOME/1/.m2
,如果有 3 个执行器则设置
$HOME/2./.m2
;
EXECUTOR_NUMBER
环境变量:
mvn clean deploy -Dmaven.repo.local=$HOME/$EXECUTOR_NUMBER/.m2
但是,最安全、最简单的选择仍然是拥有更多代理,每个代理有一个执行人。