我有一个非常类似的问题:使用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)
每个构建都有一个工作区,因此您需要首先找到所需的项目.(术语"作业"和"项目"在Jenkins中也可以互换使用 - 也可以在API中使用.)
在那之后,你可以交叉你的手指只是调用getWorkspace()
,这是不推荐使用的(有关详细信息,请参阅JavaDoc).
或者您可以找到特定的构建(例如,最后一个),它可以通过类中定义的方法为您提供用于特定构建的工作空间.getWorkspace()
AbstractBuild
示例代码:
Jenkins.instance.getJob('<job-name>').lastBuild.workspace;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
25955 次 |
最近记录: |