jenkins - Groovy 使用当前构建路径创建文件?

标签 jenkins groovy jenkins-pipeline

编辑

我正在尝试在当前构建目录中构建一个文件。利用构建环境变量,我创建了一个字符串并尝试用它创建一个新文件。但是,当我这样做时,我收到错误“没有这样的属性”

String jobDir = "C:\\Program Files (x86)\\Jenkins\\jobs\\${env.JOB_NAME}\\builds\\${env.BUILD_NUMBER}\\"
String FILEDIR = jobDir+"SOTR.log"
@Field File outFile = new File(FILEDIR)

我收到此错误:

groovy.lang.GroovyRuntimeException: Failed to create Script instance for class: class WorkflowScript. Reason: groovy.lang.MissingPropertyException: No such property: FILEDIR for class: WorkflowScript
    at org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:466)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:430)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:393)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:238)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:405)
Caused by: groovy.lang.MissingPropertyException: No such property: FILEDIR for class: WorkflowScript
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307)
    at WorkflowScript.<init>(WorkflowScript:15)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:434)
    ... 7 more
Finished: FAILURE

最佳答案

发生此错误的原因是您对变量 outFile 使用了 @Field 注释 - 当您这样做时,会将此变量从本地范围移动到脚本类范围。并且因为您引用本地范围变量 FILEDIR ,所以它会抛出 groovy.lang.MissingPropertyException ,因为在类级别没有这样的字段。删除 @Field 注释或将其添加到所有其他变量(如果这是您的意图)。

您还可以将 jobDir 变量构建为:

String jobDir = "${env.JENKINS_HOME}\\jobs\\${env.JOB_NAME}\\builds\\${env.BUILD_NUMBER}"

另请记住,默认情况下 Jenkins 不允许使用 java.io.File 类,如果您不允许服务器这样做,您将收到如下异常:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new java.io.File java.lang.String

关于jenkins - Groovy 使用当前构建路径创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48711225/

相关文章:

git - jenkins 在 Git 中从哪里获取电子邮件地址

java - 如何使用 TestNG 框架和 Jenkins 运行 Selenium 测试

jenkins - 如何在声明式管道 Jenkins 中选择多个 JDK 版本

grails - grails-2.4.3无法正常工作?

jenkins - 如何在 Jenkins 管道 Jenkinsfile 中正确编写有关 BooleanParameter 的 if 语句?

jenkins - 指定的代理类型 "call"无效。必须是 [any, docker, dockerfile, kubernetes, label, none] 之一

jenkins - 构建每个分支,但只构建那些新推到的分支

jenkins - 为什么来自 jenkins 的 sonarqube 调用因 HTTP 500 失败?

testing - 在 Grails 中快速运行单个集成测试

jenkins - 如何在 Jenkinsfile 中定义和迭代 map