[英]Read file from Jenkins workspace with System groovy script
我有一个与此非常相似的问题: Reading file from Workspace in Jenkins with Groovy script
但是,我需要从 System Groovy 脚本中读取文件,因此使用 Text-finder 或 Groovy PostBuild 插件的解决方案将不起作用。
如何从系统 groovy 脚本中获取工作区路径? 我尝试了以下方法:
System.getenv('WORKSPACE')
System.getProperty("WORKSPACE")
build.buildVariableResolver.resolve("WORKSPACE")
谢谢!
如果您的工作区中有一个名为“a.txt”的文件,以及您希望作为系统 groovy 脚本执行的名为“sysgvy.groovy”的脚本。 假设您的“sysgvy.groovy”脚本需要读取文件“a.txt”。
本主题的问题是,如果您的脚本在不提供任何路径的情况下直接读取“a.txt”,则“sysgvy.groovy”会执行并抛出错误,提示找不到“a.txt”。
我已经测试并发现以下方法效果很好。
def build = Thread.currentThread().executable
然后使用
build.workspace.toString()+"\\a.txt"
作为替换“a.txt”的完整位置字符串。
通过将“a.txt”和“sysgvy.groovy”放置到 Jenkins 主机的工作区,在 Jenkins 主机上运行也很重要。 在从机上执行不起作用。
尝试一下,应该可以找到该文件并在脚本中读取该文件,没有任何问题。
如果变量Thread有问题,只是需要导入一些模块。 因此,将这些行添加到代码的开头:
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
每个构建都有一个工作空间,因此您需要先找到所需的项目。 (术语“工作”和“项目”在 Jenkins 中可以互换使用——在 API 中也是如此。)
之后,您可以交叉手指并调用getWorkspace()
,它已被弃用(有关详细信息,请参阅JavaDoc )。
或者您可以找到一个特定的构建(例如最后一个),它可以通过在AbstractBuild
类中定义的getWorkspace()
方法为您提供用于该特定构建的工作空间。
示例代码:
Jenkins.instance.getJob('<job-name>').lastBuild.workspace;
只需使用
build.workspace
“build”变量是System Groovy Script 中的可用关键字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.