У меня есть параметризованное задание, которое использует плагин Perforce и хотел бы получить параметры/свойства сборки, а также свойство p4.change, заданное плагином Perforce.
Как получить эти свойства с помощью API Jenkins Groovy?
У меня есть параметризованное задание, которое использует плагин Perforce и хотел бы получить параметры/свойства сборки, а также свойство p4.change, заданное плагином Perforce.
Как получить эти свойства с помощью API Jenkins Groovy?
По поводу параметров:
Сначала посмотрите этот ответ. Чтобы получить список всех сборок для проекта (полученный согласно этому ответу):
project.builds
Когда вы найдете свою конкретную сборку, вам нужно получить все действия типа ParametersAction с build.getActions(hudson.model.ParametersAction)
. Затем вы запрашиваете возвращенный объект для ваших конкретных параметров.
Что касается p4.change: я подозреваю, что он также сохраняется как действие. В консоли Jenkins Groovy получите все действия для сборки, содержащей p4.change, и изучите их - это даст вам представление о том, что искать в вашем коде.
Обратите внимание, что официальная страница Wiki Wiki Jenkins описывает это более подробно: 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)
Для решения одного параметра (я думаю, что наиболее часто необходимо), это самый простой, который я нашел:
build.buildVariableResolver.resolve( "myparameter" )
на шаге Groovy System script.
У меня только что работает, поэтому, используя плагин 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")
}
В случаях, когда имя параметра не может быть жестко закодировано, я обнаружил, что это будет самый простой и лучший способ получить доступ к параметрам:
def myParam = env.getProperty(dynamicParamName)
В случаях, когда имя параметра известно и может быть жестко закодировано, следующие 3 строки эквивалентны:
def myParam = env.getProperty("myParamName")
def myParam = env.myParamName
def myParam = myParamName
System.getenv().each{
println it
}
Или более сложный:
def myvariables = getBinding().getVariables()
for (v in myvariables) {
echo "${v} " + myvariables.get(v)
}
Вам нужно отключить "Использовать Groovy Песочницу" для обоих.
Чтобы получить параметризованные параметры сборки из текущей сборки из вашего GroovyScript (используя Pipeline), все, что вам нужно сделать, это: скажем, у вас есть переменная с именем VARNAME.
def myVariable = env.VARNAME
Если вы пытаетесь передать все параметры в задание Jenkins, вы можете использовать глобальную переменную params в вашем Groovy конвейере, чтобы получить его.
Http://jenkins_host: 8080/трубопровод-синтаксических/Глобалы
Титулы
Предоставляет все параметры, определенные в сборке, как карту только для чтения с различными типами значений. Пример:
if (params.BOOLEAN_PARAM_NAME) {doSomething()} или предоставить нетривиальное значение по умолчанию:
if (params.get('BOOLEAN_PARAM_NAME', true)) {doSomething()} Примечание для использования в нескольких ветвях (Jenkinsfile): шаг свойств позволяет определить свойства задания, но они вступают в силу при выполнении шага, тогда как определения параметров сборки обычно консультируются до начала сборки. Для удобства любые параметры, которые в настоящее время определены в задании и имеют значения по умолчанию, также будут перечислены на этой карте. Это позволяет вам написать, например:
свойства ([параметры ([строка (имя: 'BRANCH', defaultValue: 'master')])]) git url: '…', branch: params.BRANCH и будьте уверены, что ветвь master будет извлечена даже в начальная сборка проекта ветки, или если в предыдущей сборке не были указаны параметры или использовалось другое имя параметра.
Используйте что-то вроде ниже.
def dumpParameter()
{
params.each {
println it.key + " = " + it.value
}
}