我需要验证一个文件是否存在于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
2条答案
按热度按时间xghobddn1#
我能够使这个工作,但它打印“文件不存在”,即使它存在。
oyjwcjzk2#
简短的回答是,你不能轻易做到这一点。
readFile、writeFile、fileExists等函数只能在管道中使用,因为它们不是标准Groovy模块的一部分。
Groovy Postbuild插件允许您在其他Jenkins作业类型中编写Groovy脚本,但您只能使用标准的Groovy工具以及https://plugins.jenkins.io/groovy-postbuild/插件文档中提到的一些额外对象。请参见白名单和非白名单方法部分。
不幸的是,File 类的使用也不起作用。第一件事是,当前工作目录没有设置为Jenkins工作区。但是像这样的代码
也不起作用,因为似乎有一些许可问题。当您尝试向文件中写入内容时,可以检查这一点。然后 java.io.FileNotFoundException:test(Permission denied) 返回。
最好的选择是将您的作业重写到一个管道中,其中包含预先准备好的函数,并且所有Groovy Postbuild对象也都可用。