我创建了一个Groovy脚本,该脚本在Jenkins作业的System Groovy Script
步骤中使用,该作业需要访问当前作业的当前版本。
当使用Hudson.model Cause.UpstreamCause
将当前作业的当前版本链接到我正在安排的依赖作业时,需要当前版本。
由于代码更简洁:
my-job-step.groovy
:
def scheduleDependentJob(jobName) {
def fooParam = new StringParameterValue('foo', 'bar');
def paramsAction = new ParametersAction(fooParam)
println "Scheduling dependent job"
def currentJob = ???
def cause = new Cause.UpstreamCause(currentBuild)
def causeAction = new hudson.model.CauseAction(cause)
instance.queue.schedule(job, 0, causeAction, paramsAction)
}
CauseAction
构造函数(见http://javadoc.jenkins-ci.org/hudson/model/Cause.UpstreamCause.html)需要一个Run
对象,当前构建对象应该是该对象的实例。我无法找到一种在Groovy脚本中获取当前正在运行的作业的好方法。
答案 0 :(得分:9)
如果你在Jenkins工作中使用Groovy plug-in,那么在Execute system Groovy script
步骤内,插件已经为您提供了一些预定义变量的访问权限:
build
The current AbstractBuild.
launcher
A Launcher.
listener
A BuildListener.
out
A PrintStream (listener.logger).
例如:
println build.getClass()
输出:
class hudson.model.FreeStyleBuild
答案 1 :(得分:5)
这是我一直在寻找的片段!
import hudson.model.*
def currentBuild = Thread.currentThread().executable
这适合我的上述脚本,如下所示:
import hudson.model.*
def scheduleDependentJob(jobName) {
def fooParam = new StringParameterValue('foo', 'bar');
def paramsAction = new ParametersAction(fooParam)
println "Scheduling dependent job"
def currentBuild = Thread.currentThread().executable
def cause = new Cause.UpstreamCause(currentBuild)
def causeAction = new hudson.model.CauseAction(cause)
instance.queue.schedule(job, 0, causeAction, paramsAction)
}
答案 2 :(得分:0)
这完成了luka5z的答案,以举例说明脚本编制者如何将侦听器传递到常规脚本:
import jenkins.model.*;
import hudson.model.*;
import hudson.util.*;
import hudson.tasks.*;
import hudson.plugins.git.*;
import hudson.scm.*
import jenkins.scm.*
def build = Thread.currentThread()?.executable
//def svn_branch = build.buildVariableResolver.resolve("SVN_BRANCH")
if (build instanceof AbstractBuild){
def workspace = build.workspace
//def job = build.parent
def scm = build.parent.scm;
//println "scm: $scm"
if (scm instanceof hudson.scm.SubversionSCM) {
scm.checkout(build, null/*Launcher*/, workspace /*workspace*/, listener/*listener*/, null /*changelogfile*/,null/*baseline*/)
}else if (scm instanceof hudson.plugins.git.GitSCM) {
scm.checkout(build, null/*Launcher*/, workspace /*workspace*/, listener/*listener*/, null /*changelogfile*/,null/*baseline*/)
}
}