我正在尝试在詹金斯(Jenkins)中创建管道,在该管道中,第一阶段可能会生成文件,也可能不会生成文件以供以后存储。我想根据是否存在隐藏文件来确定下一阶段的条件。我不确定如何执行此操作,因为隐藏步骤是在“何时”表达式之后进行的。
粗略轮廓:
第1阶段:运行一个脚本,该脚本可能会生成0-3个文件(要存放并用作Ansible的清单文件)
第2阶段:如果file1存在,请以file1作为清单运行剧本
第3阶段:如果file2存在,请使用file2运行剧本
以此类推。
我尝试使用fileExists选项在环境块中设置变量,但这将在运行任何阶段之前进行评估。
environment {
FILE_EXISTS = fileExists './filename'
}
stages {
stage ('Conditional Stage') {
when {
allOf {
expression { params.FILE_EXISTS == true }
expression { env.BRANCH_NAME != 'master' }
}
}
steps {
unstash 'files'
sh 'ansible ... '
}
}
}
(尝试了两个params.FILE_EXISTS和env.FILE_EXISTS)
还以类似的方式尝试了舞台内的“何时”表达式。
stage ('Conditional Stage') {
when {
allOf {
expression { fileExists './filename' }
...
}
}
steps {
unstash 'files'
sh 'ansible ...'
}
由于有条件,两种方法都会跳过该阶段。
如果可能的话,我想避免将文件存档,因为仅在当前版本中才需要它们。
有人能做到这一点,还是我缺少简单的东西?
另外一个注意事项:文件将被存放在Windows从站上,然后被存放在Linux从站上。存放/取消存放不是问题,但值得一提的是,文件将始终存放在与存放位置不同的从站上。
答案 0 :(得分:1)
您可以定义一个全局变量,即 def FILE_CREATED = 0 并在满足特定条件的情况下在管道中间对其进行修改,在这种情况下,请确保文件存在并更新值FILE_CREATED从0到1(请参见下面的代码)。
稍后,您可以使用when
在expression
指令的阶段检查变量的值。
下一个管道已经过测试并且可以很好地用于演示目的,它会运行阶段仅在存在特定文件的情况下运行某些回显操作 “ / tmp / demotime1”存在。
#!/usr/bin/env groovy
def FILE_CREATED = 0
pipeline {
agent {
label 'linux'
}
stages{
stage('Show if file exists'){
steps {
echo "At first, var FILE_EXISTS value is: $FILE_CREATED"
echo 'Now check if /tmp/demotime1 exists'
echo '/tmp/demotime1 It should not exists on the very first execution'
script {
def demofile = new File('/tmp/demotime1')
if (!demofile.exists()) {
println('That is expected, /tmp/demotime1 file has NOT been created yet')
}
}
}
}
stage('Force file creation and change env var'){
steps {
echo 'creating a file'
sh """ echo 'Demo time file content here' > /tmp/demotime1 """
echo 'At this time /tmp/demotime1 exists see:'
sh """ cat /tmp/demotime1 """
echo "Now let's change env var to true"
script {
if (new File('/tmp/demotime1').exists()){
println('File exists and FILE_CREATED should be 1 now')
}
FILE_CREATED = 1
}
echo "Now FILE_EXISTS value is: $FILE_CREATED"
}
}
stage('Run some echo actions ONLY if a specific file exists'){
when {
expression {
FILE_CREATED == 1
}
}
steps {
echo 'The file exists so I will do something original...'
echo 'Hello World, the $FILE_CREATED has been created'
}
}
}
}