在 jenkins Pipline 中选择执行器

问题描述 投票:0回答:1

我有一个 Jenkins 管道,它使用 2 个节点,每个节点配置为有 3 个执行程序。

有没有办法选择特定的执行器来运行管道/阶段?

我知道可以使用以下方法来选择节点:

管道{ 代理人 { 标签XXX } 阶段{ 阶段(“构建”){ 代理人 { 标签 YYY } ...} }

但是有没有办法选择执行人呢?有没有插件支持这样的功能?

我发现可以使用以下命令来检查执行器是否空闲或忙碌:

def nodeInstance = Jenkins.instance.getNode(nodeName)
def computer = nodeInstance.toComputer()
computer.executors.each { executor ->
def idleState = executor.isIdle()
      ... } 

但没有提及如何挑选它们。

jenkins groovy jenkins-pipeline jenkins-plugins jenkins-groovy
1个回答
0
投票

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
    
    
这将使构建彼此更加隔离,从而导致每个代理上使用三倍以上的磁盘空间。

但是,最安全、最简单的选择仍然是拥有更多代理,每个代理有一个执行人。

© www.soinside.com 2019 - 2024. All rights reserved.