gpt4 book ai didi

jenkins - 通过使用变量构建名称来调用 jenkins 作业

转载 作者:行者123 更新时间:2023-12-01 12:52:10 25 4
gpt4 key购买 nike

我尝试从参数化触发器启 Action 业,然后根据给定变量计算名称。是否可以在字段中设置: Build Triggers 要构建的项目像这样的值 ${RELEASE}-MAIN-${PROJECT}-LOAD_START

?

最佳答案

不幸的是,构建触发器无法做到这一点。我为这个“高阶构建作业”寻找了一个解决方案,它允许您使用一个参数化构建插件创建一个动态构建名称,但我找不到。

但是,使用 Groovy Postbuild Plugin ,你可以做很多强大的事情。下面是一个脚本,可以修改它来做你想做的事。请特别注意,它使用 build.buildVariables.get("MY_ENV_VAR") 获取环境变量。环境变量 TARGET_BUILD_JOB 指定要构建的构建作业的名称。在您的情况下,您可能希望使用这两个环境变量构建 TARGET_BUILD_JOB:

build.buildVariables.get("RELEASE")
build.buildVariables.get("PROJECT")

该脚本已被注释,因此如果您不熟悉基于 Java 的 Groovy,它应该很有意义!

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

关于jenkins - 通过使用变量构建名称来调用 jenkins 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com