我正在尝试创建一个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
我该怎么做?有可能吗?谢谢!
2条答案
按热度按时间qc6wkl3g1#
可能使用Jenkins脚本化管道,它比声明式管道更灵活。在sh脚本中打印值,并使用returnStdout使其可用于管道脚本。有关详细信息,请参阅如何获取使用Jenkinsfile(groovy)中的变量执行的shell命令的输出?
1hdlvixo2#
问题是变量
BUILD
仅在sh
块中可用。但是要在when
块中使用它,它必须在管道中全局已知。如果在pipeline
级别上在environment
块中定义BUILD
,则可能出现这种情况。您的问题的可能解决方案见此处: