使用System groovy脚本从Jenkins工作区读取文件

时间:2014-05-13 16:12:08

标签: groovy jenkins

我有一个非常类似的问题: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")

谢谢!

3 个答案:

答案 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脚本中可用。