Вопрос по jenkins – Как получить параметры сборки Jenkins, используя Groovy API?

28

У меня есть параметризованное задание, в котором используется плагин Perforce, и я хотел бы получить параметры / свойства сборки, а также свойство p4.change, установленное плагином Perforce.

Как получить эти свойства с помощью API Jenkins Groovy?

Ваш Ответ

7   ответов
24

Для разрешения одного параметра (я думаю, что наиболее часто требуется), это самое простое, что я нашел:

build.buildVariableResolver.resolve("myparameter")

на этапе сборки скрипта Groovy System.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgroovy.lang.MissingPropertyException: No such property: build for class: Script1
Error: User Rate Limit Exceeded
25

Пожалуйста, обратите внимание, что на официальной странице Jenkins Wiki это также рассматривается более подробно: https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script Существенная часть воспроизводится ниже:

// get parameters
def parameters = build?.actions.find{ it instanceof ParametersAction }?.parameters
parameters.each {
   println "parameter ${it.name}:"
   println it.dump()
}

// ... or if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)
15

По поводу параметров:

Смотрите этот ответ первым, Чтобы получить список всех сборок для проекта (полученный согласно этому ответу):

project.builds

Когда вы найдете свою конкретную сборку, вам нужно получить все действия типаParametersAction сbuild.getActions(hudson.model.ParametersAction), Затем вы запрашиваете возвращенный объект для ваших конкретных параметров.

Что касается p4.change: я подозреваю, что он также сохраняется как действие. В консоли Jenkins Groovy получите все действия для сборки, содержащей p4.change, и изучите их - это даст вам представление о том, что искать в вашем коде.

2

Get all of the parameters:

System.getenv().each{
  println it
}

Или более сложный:

def myvariables = getBinding().getVariables()
for (v in myvariables) {
   echo "${v} " + myvariables.get(v)
}

Вам нужно будетdisable & quot; Использовать Groovy Sandbox & quot; для обоих.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
10

Я только что начал работать, поэтому, в частности, с помощью плагина Groovy Postbuild вы можете сделать следующее:

def paramText
def actionList = manager.build.getActions(hudson.model.ParametersAction)
if (actionList.size() != 0)
{
  def pA = actionList.get(0)
  paramText = pA.createVariableResolver(manager.build).resolve("MY_PARAM_NAME")
}
Error: User Rate Limit Exceeded
3

В случаях, когда имя параметра не может быть жестко закодировано, я обнаружил, что это будет самый простой и лучший способ получить доступ к параметрам:

def myParam = env.getProperty(dynamicParamName)

В случаях, когда имя параметра известно и может быть жестко закодировано, следующие 3 строки эквивалентны:

def myParam = env.getProperty("myParamName")
def myParam = env.myParamName
def myParam = myParamName
Error: User Rate Limit Exceeded
1

Чтобы получить параметризованные параметры сборки из текущей сборки из GroovyScript (с использованием Pipeline), все, что вам нужно сделать, это: Скажем, у вас есть переменная с именем VARNAME.

def myVariable = env.VARNAME

Похожие вопросы