访问Groovy脚本中的当前Jenkins构建

问题描述 投票:6回答:3

我创建了一个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脚本中当前正在运行的作业。

jenkins groovy
3个回答
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

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

0
投票

这完成了luka5z的答案,以举例说明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*/)
    }
}

listener in Scriptler

© www.soinside.com 2019 - 2024. All rights reserved.