jenkins 即使从表达式开始禁用阶段,也会选择座席

jv4diomz  于 2023-04-05  发布在  Jenkins
关注(0)|答案(1)|浏览(147)

我需要一些帮助与以下情况.我开始一个主代理Jenkins管道.我的管道是分阶段结构.前2阶段分配给主代理(更确切地说,我没有声明另一个代理).第三阶段称为Polyspace在我的情况下包含节点{}结构.这样做的目的是去执行这个阶段的另一个代理.
问题是:在那一刻,当我禁用参数Polyspace代理被选中进行结帐(我使用git作为SCM)。我想如果可能不选择代理。我的情况是,我只有1个代理执行这个,Polyspace“步骤和一个大的连续集成系统。所以,如果这个代理被选中,即使我的阶段被禁用,我也需要等到代理可用(我只有1个执行器)
信息:XXX_1 -〉主代理YYY_1 -〉代理,,Polyspace”Stage INIT,Compile are bydefault assigned to Main agent which is XXX_1 you can see in parameters“POLYSPACE”is disable which means WHEN condition from Polyspace stage is false
我的渠道:

@Library('SLXXX') _

log.init("info")

pipeline {
    agent {
        node {
            label 'XXX_1'
        }
    }
    triggers {
        cron('H 1 * * *')
    }
    options {
        disableConcurrentBuilds()
        buildDiscarder(logRotator(numToKeepStr: '10'))
        timeout(time: 4, unit: 'HOURS')
        timestamps ()
    }
    
    parameters {
        booleanParam(name: 'INIT', defaultValue: true, description: 'Init after yaml script update')
        booleanParam(name: 'COMPILE', defaultValue: true, description: 'Run COMPILE')
        booleanParam(name: 'POLYSPACE', defaultValue: false, description: 'Run polyspace')

        
    }
    
    stages {
        stage('Init') {
            when { expression { params.INIT } }
            steps {
                script {
                    xxx
                }
                script {
                    xxx
                }
            }
        }
    
        stage('Compile') {
            when { expression { params.COMPILE } }
            steps {
                dir('ThirdParty/Jenkins') {
                    xxx
                }
                
                archiveArtifacts artifacts: 'xxx'
                archiveArtifacts artifacts: 'xxx'
                archiveArtifacts artifacts: 'xxx'
            }
        }
        stage('Polyspace') {
            agent {
                node {
                    label 'YYY_1'
                }
            }
            when { expression { params.POLYSPACE } }
                options {
                    timeout(time: 3, unit: 'HOURS') 
                }
            steps {
                script {
                    // run polyspace build from yaml file description
                        mqPipelineConfigPolyspace(config)
                }
            }
        }   

    }
    
        
    post { 
        always { 
            echo 'This will always run for saving artifacts from failed tests'
        }
        
        success {
            echo 'This will run only if successful'
            script
                {
                xxx
                }
        }
        failure {
            echo 'This will run only if failed'
            script
                {
                xxx
                }
        }
    }

}

我想禁用POLYSPACE参数,并且代理选择应该被忽略。从该阶段开始的所有内容都应该被忽略。

zqry0prt

zqry0prt1#

when条件块中,在agent块之前使用beforeAgent指令。在选择代理之前移动要计算的when块。
默认情况下,阶段的when条件将在输入该阶段的代理(如果定义了代理)后进行计算。但是,可以通过在when块中指定beforeAgent选项来更改此设置。如果beforeAgent设置为true,则将首先计算when条件,并且只有当when条件计算为true时,才会输入agent。Jenkins用户手册-管道语法-在阶段中输入agent之前评估when
放置在when块中的指令beforeAgent true将被评估,如果参数值设置为false,则阶段将完成,这将避免选择/等待/启动声明的代理来运行条件/阶段。
将jenkinsfile“Polyspace”阶段更新为以下内容:

stage('Polyspace') {
            when { 
              expression { params.POLYSPACE.toBoolean() } 
              beforeAgent true
              }
            agent {
                node {
                    label 'YYY_1'
                }
            }
                options {
                    timeout(time: 3, unit: 'HOURS') 
                }
            steps {
                script {
                    // run polyspace build from yaml file description
                        mqPipelineConfigPolyspace(config)
                }
            }
        }

相关问题