Jenkins管道“when”条件,带有sh定义的变量

okxuctiv  于 2023-03-17  发布在  Jenkins
关注(0)|答案(2)|浏览(184)

我正在尝试创建一个Jenkins管道,在第一个阶段中,我在一个shshell脚本中定义了一个变量,然后我想使用一个“when”条件来运行下一个阶段,该条件取决于前面定义的变量。

pipeline {
    agent { label 'php71' }
    stages {
        stage('Prepare CI...') {
            steps{
                sh '''
                    # Get the comment that was made on the PR
                    COMMENT=`echo $payload | jq .comment.body | tr -d '"'`
                    if [ "$COMMENT" = ":repeat: Jenkins" ]; then
                        BUILD="build"
                    fi
                '''
            }
        }
        stage('Build Pre Envrionment') {
            agent { label 'php71' }
            when {
                expression { return $BUILD == "build" }
            }
            steps('Build') {
                sh '''
                    echo $BUILD
                    echo $COMMENT
                '''
            }
        }
    }
}

这给了我一个错误:缺少属性异常:无此类属性:$BUILD用于类:groovy.lang.Binding
我该怎么做?有可能吗?谢谢!

qc6wkl3g

qc6wkl3g1#

可能使用Jenkins脚本化管道,它比声明式管道更灵活。在sh脚本中打印值,并使用returnStdout使其可用于管道脚本。有关详细信息,请参阅如何获取使用Jenkinsfile(groovy)中的变量执行的shell命令的输出?

1hdlvixo

1hdlvixo2#

问题是变量BUILD仅在sh块中可用。但是要在when块中使用它,它必须在管道中全局已知。如果在pipeline级别上在environment块中定义BUILD,则可能出现这种情况。您的问题的可能解决方案见此处:

pipeline {
    agent { label 'php71' }
    environment {
        COMMENT=sh(script: '''# Get the comment that was made on the PR
                    echo $payload | jq .comment.body | tr -d '"'
                ''', returnStdout: true).trim()
        BUILD=sh(script: '''# Get the comment that was made on the PR
                    COMMENT=`echo $payload | jq .comment.body | tr -d '"'`
                    if [ "$COMMENT" = ":repeat: Jenkins" ]; then
                        echo "build"
                    fi
                ''', returnStdout: true).trim()
    }
    stages {
        stage('Build Pre Envrionment') {
            agent { label 'php71' }
            when {
                expression { return env.BUILD == "build" }
            }
            steps('Build') {
                sh '''
                    echo $BUILD
                    echo $COMMENT
                '''
            }
        }
    }
}

相关问题