访问当前Jenkins内置Groovy脚本

访问当前Jenkins内置Groovy脚本,jenkins,groovy,Jenkins,Groovy,我创建了一个Groovy脚本,用于Jenkins作业中的系统Groovy脚本步骤,该作业需要访问当前作业的当前构建 使用Hudson.modelCause.upstreamc时需要当前版本使用将当前作业的当前版本链接到我正在计划的从属作业 因为代码更简洁: 我的作业步骤.groovy: def scheduleDependentJob(jobName) { def fooParam = new StringParameterValue('foo', 'bar'); def paramsA

我创建了一个Groovy脚本,用于Jenkins作业中的
系统Groovy脚本
步骤,该作业需要访问当前作业的当前构建

使用Hudson.model
Cause.upstreamc时需要当前版本使用
将当前作业的当前版本链接到我正在计划的从属作业

因为代码更简洁:

我的作业步骤.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
构造函数(如上所示)需要一个
Run
对象,当前构建对象应该是该对象的实例。我就是找不到一个好方法来在Groovy脚本中获取当前正在运行的作业构建。

这就是我一直在寻找的代码片段

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)
}

如果您正在使用Jenkins作业,那么在
执行系统Groovy脚本
步骤中,插件已经为您提供了对一些预定义变量的访问:

build
    The current AbstractBuild.
launcher
    A Launcher.
listener
    A BuildListener.
out
    A PrintStream (listener.logger).
例如:

println build.getClass()
产出:

class hudson.model.FreeStyleBuild

这就完成了对的回答,以举例说明scriptler如何将侦听器传递给groovy脚本:

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*/)
    }
}

我发现YMMV有点依赖于调用groovy脚本的内容(例如,email ext插件、后期构建操作)。通过运行作业,“activeBuild=Thread.currentThread().executable”可以工作。那些不起作用的老工作。如果存在预定义的var构建,那么使用它可能是最好的。要在这两种情况下获取构建对象,您可以执行类似于“try{c=build.getClass()}catch(异常ex){try{build=Thread.currentThread().executable}catch(异常ex2){println(“噢,天哪,没有构建对象。”)}”的操作。