fmd*_*lle 4 jenkins jenkins-groovy jenkins-pipeline
我正在使用 Jenkins 声明式管道,我想根据环境变量执行一个条件步骤,该变量是根据文件的存在设置的。
所以我只想做这样的事情:如果 Dockerfile 存在,则执行下一阶段,否则不执行。
为了执行此操作,我尝试了:
pipeline {
// ...
stage {
stage('Docker') {
environment {
IS_DOCKERFILE = fileExists 'Dockerfile'
}
when {
environment name: 'IS_DOCKERFILE', value: true
}
stage('Build') {
// ...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者 :
pipeline {
// ...
stage {
stage('Docker') {
environment {
IS_DOCKERFILE = fileExists 'Dockerfile'
}
when {
expression {
env.IS_DOCKERFILE == true
}
}
stage('Build') {
// ...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,Dockerfile 都存在并且位于工作区中。我也尝试过使用字符串 ( "true"),但每次,管道都会继续而不执行阶段“构建”。
有什么建议 ?
这是因为表达式:
IS_DOCKERFILE = fileExists 'Dockerfile'
Run Code Online (Sandbox Code Playgroud)
创建布尔值作为字符串的环境变量:
$ set
IS_DOCKERFILE='false'
Run Code Online (Sandbox Code Playgroud)
.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'
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如@Sergey 已经发布的那样,问题在于您正在将字符串与布尔值进行比较。请参阅fileExists:验证工作区中是否存在文件。
除了他的答案之外,您还可以直接与字符串进行比较:
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'
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18054 次 |
| 最近记录: |