如何防止 Jenkins Pipeline 代理从主机的插槽中占用一个插槽

How to prevent Jenkins Pipeline agent from taking one slot from the main machine's slots

提问人:DeadlyHigh 提问时间:11/15/2023 更新时间:11/15/2023 访问量:24

问:

我有以下Jenkins Pipelines脚本:

pipeline{

agent any

stages {

    stage('First Step'){
        agent { label 'TheSecondAgent'}
            steps {
                ... Do stuff
            }  
        }
    }
    
    stage('Second Step'){
        agent { label 'TheSecondAgent'}
            steps {
                ... Do even more stuff
            }  
        }
    }
    
    ... Bunch more steps here
    
    stage('Archive Artifacts'){
            agent { 
            node { label 'TheSecondAgent'
                   customWorkspace 'another/path/where/artifacts/are'
               }
        }
            steps {
            archiveArtifacts artifacts: '**/logs/*.xml, **/logs/*.json, **/logs/*.log', followSymlinks: false
        
        }
    }
}

post {
    always{
        node('TheSecondAgent'){
            dir('path/to/logs'){
                xunit(tools: [ xUnitDotNet(pattern: '**/logs/*-jenkinsLogs.xml') ])
            }
        }
    }
}

}

正如我们所看到的,此管道中的每个步骤都设置了另一个代理。但是,当我运行此作业时,我仍然可以看到,这从主 Jenkin 的插槽以及代理的插槽中占用了一个插槽。

以前,通过将此管道顶部的代理设置为 none 来修复此问题,但这会阻止我使用 Artifacts 和 post builds,因此它必须为“任何”......我认为。

有没有办法“阻止”或以某种方式“强制”此脚本仅在代理计算机中运行,在本例中为名为:TheSecondAgent的代理?

Jenkins Jenkins-管道

评论

0赞 Iterokun 11/15/2023
如果每个阶段都需要“TheSecondAgent”,为什么不在管道级别设置它呢?
0赞 DeadlyHigh 11/15/2023
@Iterokun 正如帖子中提到的,如果所谓的“顶级”代理不是“任何”,那么 Artifactoring 和 Post 步骤就不起作用了。它还导致了问题,即工作永远不会开始......它将停留在以下位置:永远等待“TheOtherAgent”步骤上的下一个可用执行器。
2赞 Iterokun 11/15/2023
你是说,如果你得到示例Hello World管道,并将顶级代理从更改为作业,则永远不会启动?我认为您需要先解决这个问题,然后才能进入不起作用的部分。any{ label 'TheSecondAgent' }post
0赞 grzegorzgrzegorz 11/20/2023
我在这里猜测,但是如果您在存档时遇到问题,这与您尝试从工作区之外存档内容有关。archiveArtifacts 步骤不支持此功能。在存档之前,您应该或填充到您的工作区。mvrsync

答: 暂无答案