gpt4 book ai didi

具有 bool 环境变量的 Jenkins 声明性管道表达式

转载 作者:行者123 更新时间:2023-12-05 08:30:32 24 4
gpt4 key购买 nike

我正在使用 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"),但每次,管道都会继续而不执行“构建”阶段。

有什么建议吗?

最佳答案

这是因为表达式:

IS_DOCKERFILE = fileExists 'Dockerfile'

创建 bool 值为字符串的环境变量:

$ 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'
}
}
}

关于具有 bool 环境变量的 Jenkins 声明性管道表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63676727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com