我有一个非常类似的问题: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")
谢谢!
答案 0 :(得分:10)
如果工作区中有一个名为“a.txt”的文件,以及一个名为“sysgvy.groovy”的脚本,您希望将其作为系统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.*
答案 1 :(得分:8)
每个版本都有一个工作区,因此您需要先找到所需的项目。 (术语" job"和" project"在Jenkins中也可以使用,也可以在API中使用。)
之后,您可以交叉双手,只需致电getWorkspace()
,这已被弃用(有关详细信息,请参阅JavaDoc)。
或者您可以找到特定的构建(例如最后一个),它可以通过getWorkspace()
方法为您提供用于特定构建的工作区,因为它在{{ 1}} class。
示例代码:
AbstractBuild
答案 2 :(得分:0)
只需使用
build.workspace
“ build”变量在系统Groovy脚本中可用。