Jenkins文件参数插件问题

shstlldc  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(255)

我正在创建一个Jenkins管道(声明性语法),它接受字符串和文件参数。字符串参数已经在声明性语法中可用。但是要在声明性语法中获得文件参数,我们可以选择使用文件参数插件。
下面是Jenkins文件的外观:

pipeline {
  agent any
  parameters {
    base64File 'THEFILE'
  }
  stages {
    stage('Example') {
      steps {
        withFileParameter('THEFILE') {
          sh 'cat $THEFILE'
        }
      }
    }
  }
}

当您提供一个文件时,它就会工作,并打印文件的内容。
但是当你不提供一个文件作为参数时,管道应该失败并抱怨它。但是它没有失败。相反,控制台输出的那部分是说:

[Pipeline] {
[Pipeline] stage
[Pipeline] { (Example)
[Pipeline] withFileParameter
[Pipeline] {
[Pipeline] sh
+ cat /var/jenkins_home/workspace/test-file-plugin@tmp/THEFILE18272962853430646509.tmp
[Pipeline] }
[Pipeline] // withFileParameter
[Pipeline] }
[Pipeline] // stage

这意味着,即使您不提供临时文件,也会创建类似THEFILE18272962853430646509.tmp的临时文件。
根据此documentation
默认情况下,如果生成没有参数,则会出现错误
那为什么它没有失败呢?
有人能帮我解决这个问题吗?

vxqlmq5t

vxqlmq5t1#

不知道为什么它不能正常工作。有多种方法可以解决这个问题,这里有两个解决方案,基于Shell和Groovy。

外壳

pipeline {
  agent any
  parameters {
    base64File 'THEFILE'
  }
  stages {
    stage('Example') {
      steps {
        withFileParameter(name: 'THEFILE') {
          sh '''
            cat $THEFILE
            if [ -s $THEFILE ]
            then
                 echo "File is not Empty!"
            else
                 echo "File was not specified or is Empty!"
                 exit 1
            fi
          '''
        }
      }
    }
  }
}

“很棒"

pipeline {
  agent any
  parameters {
    base64File 'THEFILE'
  }
  stages {
    stage('Example') {
      steps {
        withFileParameter(name: 'THEFILE') {
            script {
                def fileContent = readFile("$THEFILE")
                if (fileContent.isEmpty()) {
                    error "File was not specified or is Empty"
                }
            }
        }
      }
    }
  }
}

相关问题