检查詹金斯管道中是不是存在文件
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')以上是关于检查詹金斯管道中是不是存在文件的主要内容,如果未能解决你的问题,请参考以下文章