groovy 如何检查文件是否存在于jenkins工作区的自由式作业

am46iovg  于 2023-05-06  发布在  Jenkins
关注(0)|答案(2)|浏览(317)

我需要验证一个文件是否存在于jenkins工作区后,HTML发布。所以这将是一个构建后的groovy脚本执行:
已尝试以下操作:

def fileName = "/temp/new_invoices.txt"
def testFile = new File(fileName)
if (!testFile.exists()) testRunner.fail("File $fileName does not exist.")
  else log.info "File $fileName exists."
def exists = fileExists 'file'

if (exists) {
    echo 'Yes'
} else {
    echo 'No'
}
println new File('var/jenkins/workspace/kae.html').exists()

什么都不工作,给出以下错误:

ERROR: Failed to evaluate groovy script.
groovy.lang.MissingMethodException: No signature of method: Script1.fileExists() is applicable for argument types: (java.lang.String) values: [/target/package-summary.html]
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58)
    at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:81)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
    at Script1.run(Script1.groovy:1)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:585)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:623)
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:594)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:375)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SecureGroovyScript.evaluate(SecureGroovyScript.java:312)
    at org.jvnet.hudson.plugins.groovypostbuild.GroovyPostbuildRecorder.perform(GroovyPostbuildRecorder.java:380)
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
    at hudson.maven.MavenModuleSetBuild$MavenModuleSetBuildExecution.post2(MavenModuleSetBuild.java:1073)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
    at hudson.model.Run.execute(Run.java:1835)
    at hudson.maven.MavenModuleSetBuild.run(MavenModuleSetBuild.java:543)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Build step 'Groovy Postbuild' changed build result to UNSTABLE
Notifying upstream projects of job completion
xghobddn

xghobddn1#

我能够使这个工作,但它打印“文件不存在”,即使它存在。

def fileName = "/var/abc.html"
def testFile = new File(fileName)
if (!testFile.exists()) manager.listener.logger.println("File $fileName does not exist.")
  else manager.listener.logger.println("File $fileName exists.")
oyjwcjzk

oyjwcjzk2#

简短的回答是,你不能轻易做到这一点。
readFile、writeFile、fileExists等函数只能在管道中使用,因为它们不是标准Groovy模块的一部分。
Groovy Postbuild插件允许您在其他Jenkins作业类型中编写Groovy脚本,但您只能使用标准的Groovy工具以及https://plugins.jenkins.io/groovy-postbuild/插件文档中提到的一些额外对象。请参见白名单和非白名单方法部分。
不幸的是,File 类的使用也不起作用。第一件事是,当前工作目录没有设置为Jenkins工作区。但是像这样的代码

File file = new File(manager.getEnvVariable("WORKSPACE") + "/test")
file.exists()

也不起作用,因为似乎有一些许可问题。当您尝试向文件中写入内容时,可以检查这一点。然后 java.io.FileNotFoundException:test(Permission denied) 返回。
最好的选择是将您的作业重写到一个管道中,其中包含预先准备好的函数,并且所有Groovy Postbuild对象也都可用。

相关问题