如何解决具有布尔环境变量的Jenkins声明式管道表达式
我正在使用Jenkins声明性管道,我想根据环境变量进行条件步骤,该环境变量是根据文件的存在设置的。
所以我只想做这样的事情:如果Dockerfile存在,请执行下一阶段,否则就不要。
要执行此操作,我尝试了:
pipeline {
// ...
stage {
stage('Docker') {
environment {
IS_DOCKERFILE = fileExists 'Dockerfile'
}
when {
environment name: 'IS_DOCKERFILE',value: true
}
stage('Build') {
// ...
}
}
}
}
或:
pipeline {
// ...
stage {
stage('Docker') {
environment {
IS_DOCKERFILE = fileExists 'Dockerfile'
}
when {
expression {
env.IS_DOCKERFILE == true
}
}
stage('Build') {
// ...
}
}
}
}
在两种情况下,Dockerfile都存在并且位于工作空间中。我也尝试过使用字符串("true"
),但是每次管道都继续执行而不执行阶段“ Build”。
有什么建议吗?
解决方法
正如@Sergey 已经发布的那样,问题在于您将字符串与布尔值进行比较。见fileExists: Verify if file exists in workspace。
除了他的回答,你还可以直接比较字符串:
environment {
IS_DOCKERFILE = fileExists 'Dockerfile'
}
stages {
stage("build docker image") {
when {
expression {IS_DOCKERFILE == 'true'}
}
steps {
echo 'fileExists'
}
}
stage("build libraries") {
when {
expression {IS_DOCKERFILE == 'false'}
}
steps {
echo 'fileNotExists'
}
}
}
,
这是因为表现力:
IS_DOCKERFILE = fileExists 'Dockerfile'
使用布尔值作为字符串创建环境变量:
$ set
IS_DOCKERFILE='false'
因此解决方案是像这样使用.toBoolean()
:
environment {
IS_DOCKERFILE = fileExists 'Dockerfile'
}
stages {
stage("build docker image") {
when {
expression {
env.IS_DOCKERFILE.toBoolean()
}
}
steps {
echo 'fileExists'
}
}
stage("build libraries") {
when {
expression {
!env.IS_DOCKERFILE.toBoolean()
}
}
steps {
echo 'fileNotExists'
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。