具有布尔环境变量的Jenkins声明式管道表达式

时间:2020-08-31 19:07:26

标签: jenkins jenkins-pipeline jenkins-groovy

我正在使用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”。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

正如@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'
        }
    }
}

答案 1 :(得分:0)

这是因为表现力:

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'
        }
    }
}
相关问题