如何自定义Jenkins构建名称?

sla*_*acy 31 jenkins jenkins-plugins

当我在Jenkins中运行作业时,每个构建都会给出一个名称,该名称在构建历史记录的UI中显示,基本上是当前的日期和时间.

我希望能够在那里放置构建参数,以便我可以在构建历史中看到构建了哪些分支以及何时构建.

我一直在寻找插件来做到这一点,但我找不到任何插件.有吗?

Chr*_*Orr 32

听起来像Build Name Setter插件.

但是如果你使用的是Pipeline,你可以这样做:

currentBuild.description = "#${BUILD_NUMBER}, branch ${BRANCH}"
Run Code Online (Sandbox Code Playgroud)

  • 但是这个插件不能表达构建参数,或者一般来说你可能设置的脚本env变量.但它可以读取主机env变量(例如'$ {HOSTNAME}')和工作空间中的属性文件.因此,一个不那么优雅的解决方法是将shell脚本定义为构建步骤,并将参数'name = values'写入任意属性文件(例如:echo"MY_PARAM = $ {MY_PARAM}"> params.唯一的问题是构建名称setter插件过早地评​​估表达式,最后只评估结尾(因此构建必须结束才能看到结果). (5认同)

小智 17

[回复上面Patrice M.的评论,我没有足够的声誉来评论]:

构建名称二传手插件可以表达各种各样的变量,包括环境变量,结合使用时,令牌宏插件.此外,构建参数也可用作环境变量; 所以,例如,如果您的构建具有参数"MYPARAM",那么您可以在构建名称中使用它(假设您已经安装了Token Macro插件),如下所示:

Built with parameter MYPARAM: ${ENV, var="MYPARAM"}
Run Code Online (Sandbox Code Playgroud)


小智 8

也可以使用Jenkins Groovy插件 "手动"设置构建名称.只需按以下步骤操作:

  1. 生成新的构建名称.如果要在单独的作业步骤中执行它,则可能需要将其保存到属性文件,例如名称为"newVersion",并使用Jenkins EnvInject插件执行"注入环境变量"步骤.
  2. 下一步 - 运行System Groovy脚本:

    def build = Thread.currentThread().executable
    assert build
    def newBuildName = build.getEnvironment().get('newVersion')
    try {
        if (newBuildName) build.displayName = newBuildName
        println "Build display name is set to ${newBuildName}"
    } catch (MissingPropertyException e) {}
    
    Run Code Online (Sandbox Code Playgroud)

如您所见,我们在build.displayName这里使用变量.它的值是Jenkins中可见的构建名称.

  • 很酷.作为"用户"的唯一缺点是在Groovy脚本上加速了"管理员批准".使用*Groovy Postbuild*插件,语法略有不同.示例:`manager.build.displayName ="#"+ manager.build.number +''+ manager.envVars ["desc_var"];` - 和描述:`manager.build.description ="Groovy Postbuild: "+ manager.build.number` (4认同)