检查詹金斯管道中是不是存在文件

Posted

技术标签:

【中文标题】检查詹金斯管道中是不是存在文件【英文标题】:Check if a file exists in jenkins pipeline检查詹金斯管道中是否存在文件 【发布时间】:2016-11-26 20:23:11 【问题描述】:

如果我的 jenkins 工作区中存在目录并且工作区中的管道步骤 "fileExists: Verify file exists" 似乎不存在,我正在尝试运行一个块正常工作。

我正在使用 Jenkins v 1.642 和 Pipeline v 2.1。并试图有类似的条件

if ( fileExists 'test1' ) 
  //Some block

我还有哪些其他选择?

【问题讨论】:

请描述您观察到的错误行为: 【参考方案1】:

if 条件中使用fileExists 步骤时需要使用方括号或将返回值分配给变量

使用变量:

def exists = fileExists 'file'

if (exists) 
    echo 'Yes'
 else 
    echo 'No'

使用括号:

if (fileExists('file')) 
    echo 'Yes'
 else 
    echo 'No'

【讨论】:

def reportPath = build.getWorkspace().child("Report.txt") 哪一个是正确的? def exists = fileExists reportPath 或 def exists = fileExists 'reportPath'。在这两种情况下,我都会收到一条消息 [找不到内容令牌(检查您的使用情况):fileExists]。 我在尝试此语法时遇到错误(fileExists 带括号)--“WorkflowScript: 90: Expected a step @ line 90, column 21”,插入符号指向if. 文件名比较呢?此方法在比较文件名时是否使用区分大小写的比较?如果是,那么如何以不区分大小写的方式进行比较? 对于声明性 Jenkinsfile,您可以使用 fileExists(file: 'src/test/java') (例如,用于阶段中步骤的 when 表达式) @MariusGedminas if 语句不能位于管道中“步骤”的顶层。将 if 语句包含在脚本标记中以解决此问题。例如,步骤 script if (condition) doSomething() 【参考方案2】:

必须使用关键字“return”

stage('some stage') 
    when  expression  return fileExists ('myfile')  
    steps 
           echo "file exists"
          
    

【讨论】:

这在我身边工作得很好。如果一个人正在编写纯 Jenkins Pipeline DSL 而不使用任何“脚本”部分,我认为这是一个更干净的解决方案。就我而言,我需要测试文件是否不存在,所以我这样做了:when not expression return fileExists ('myfile')

以上是关于检查詹金斯管道中是不是存在文件的主要内容,如果未能解决你的问题,请参考以下文章

詹金斯管道的 GIT 交叉签出和依赖项检查

詹金斯管道选择性删除

将文件复制到管道詹金斯中的远程窗口服务器

为啥我无法在 Windows 10 中运行的詹金斯管道中运行批处理文件?

如何在另一个詹金斯管道B中调用詹金斯管道A

如何使用詹金斯管道将战争部署到tomcat?