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

Jam*_*esE 9 groovy jenkins

我有一个非常类似的问题:使用Groovy脚本从Jenkins的Workspace读取文件

但是我需要从System Groovy脚本中读取文件,因此使用Text-finder或Groovy PostBuild插件的解决方案将无法正常工作.

如何从系统groovy脚本获取工作空间路径?我尝试过以下方法:

System.getenv('WORKSPACE')
System.getProperty("WORKSPACE")
build.buildVariableResolver.resolve("WORKSPACE")
Run Code Online (Sandbox Code Playgroud)

谢谢!

lin*_*cao 10

如果您的工作区中有一个名为"a.txt"的文件,以及一个名为"sysgvy.groovy"的脚本,您希望将其作为系统groovy脚本执行.假设您的"sysgvy.groovy"脚本需要读取文件"a.txt".

本主题的问题是,如果您的脚本直接读取"a.txt"而不提供任何路径,则会执行"sysgvy.groovy"并将发出错误消息,指出无法找到"a.txt".

我测试过并发现以下方法效果很好.

def build = Thread.currentThread().executable
Run Code Online (Sandbox Code Playgroud)

然后用

build.workspace.toString()+"\\a.txt"
Run Code Online (Sandbox Code Playgroud)

作为替换"a.txt"的完整位置字符串.

通过将"a.txt"和"sysgvy.groovy"放在Jenkins主机的工作区中,在Jenkins主机上运行也很重要.在从机上执行不起作用.

尝试一下,应该找到文件并在脚本中读取没有任何问题.

如果变量Thread存在问题,只需要导入一些模块.所以将这些行添加到代码的开头:

import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
Run Code Online (Sandbox Code Playgroud)

  • groovy.lang.MissingPropertyException:没有这样的属性:类的可执行文件:java.lang.Thread (4认同)

tve*_*eon 8

每个构建都有一个工作区,因此您需要首先找到所需的项目.(术语"作业"和"项目"在Jenkins中也可以互换使用 - 也可以在API中使用.)

在那之后,你可以交叉你的手指只是调用getWorkspace(),这是不推荐使用的(有关详细信息,请参阅JavaDoc).

或者您可以找到特定的构建(例如,最后一个),它可以通过类中定义的方法为您提供用于特定构建的工作空间.getWorkspace()AbstractBuild

示例代码:

Jenkins.instance.getJob('<job-name>').lastBuild.workspace;
Run Code Online (Sandbox Code Playgroud)