Вызовите задание Дженкинса, используя переменную для построения имени
Я пытаюсь запустить задание из параметризованного триггера и вычисляю имя из заданной переменной. Можно ли установить в поле: Построить триггеры проектов для создания значения, подобного этому $ {RELEASE} -MAIN - $ {PROJECT} -LOAD_START
?
1 ответ
К сожалению, это невозможно с помощью триггеров сборки. Я искал решение для этого "задания сборки более высокого порядка", которое позволило бы вам создать динамическое имя сборки с помощью одного из параметризованных плагинов сборки, но я не смог его найти.
Однако, используя плагин Groovy Postbuild, вы можете сделать много полезных вещей. Ниже приведен скрипт, который можно модифицировать, чтобы делать то, что вы хотите. В частности, обратите внимание, что он получает переменные среды, используя build.buildVariables.get("MY_ENV_VAR")
, Экологическая переменная TARGET_BUILD_JOB
указывает имя задания сборки для сборки. В вашем случае вы хотели бы построить TARGET_BUILD_JOB
используя эти две переменные среды:
build.buildVariables.get("RELEASE")
build.buildVariables.get("PROJECT")
Сценарий прокомментирован так, что, если вы не знакомы с Groovy, который основан на Java, мы надеемся, что он имеет смысл!
import hudson.model.*
import hudson.model.queue.*
import hudson.model.labels.*
import org.jvnet.jenkins.plugins.nodelabelparameter.*
def failBuild(msg)
{
throw new RuntimeException("[GROOVY] User message, exiting with error: " + msg)
}
// Get the current build job
def thr = Thread.currentThread()
def build = thr?.executable
// Get the parameters for the current build job
// For ?:, see "Elvis Operator" (http://groovy.codehaus.org/Operators#Operators-ElvisOperator)
def currentParameters = build.getAction(ParametersAction.class)?.getParameters() ?:
failBuild("There are no parameters to pass down.")
def nodeName = build.getBuiltOnStr()
def newParameters = new ArrayList(currentParameters); newParameters << new NodeParameterValue("param_NODE",
"Target node -- the node of the previous job", nodeName)
// Retrieve information about the target build job
def targetJobName = build.buildVariables.get("TARGET_BUILD_JOB")
def targetJobObject = Hudson.instance.getItem(targetJobName) ?:
failBuild("Could not find a build job with the name $targetJobName. (Are you sure the spelling is correct?)")
println("$targetJobObject, $targetJobName")
def buildNumber = targetJobObject.getNextBuildNumber()
// Add information about downstream job to log
def jobUrl = targetJobObject.getAbsoluteUrl()
println("Starting downstream job $targetJobName ($jobUrl)" + "\n")
println("======= DOWNSTREAM PARAMETERS =======")
println("$newParameters")
// Start the downstream build job if this build job was successful
boolean targetBuildQueued = targetJobObject.scheduleBuild(5,
new Cause.UpstreamCause(build),
new ParametersAction(newParameters)
);
if (targetBuildQueued)
{
println("Build started successfully")
println("Console (wait a few seconds before clicking): $jobUrl/$buildNumber/console")
}
else
failBuild("Could not start target build job")