如何将'git describe'输出到Jenkins构建名称

时间:2015-07-21 21:34:56

标签: jenkins

将命令输出放在Jenkins构建名称中的最佳(或任何!)方法是什么?

我想将git describe命令的输出放入Jenkins作业的构建名称中。

我已经安装了build-name-setter插件,希望将构建名称设置为:

${ENV, var="GIT_DESCRIBE"}

我只是不知道在设置名称之前如何设置$GIT_DESCRIBE!我尝试过使用EnvInject插件。动态设置环境变量的唯一方法是使用groovy脚本。这可以很好地工作,除了我的工作是在一个远程奴隶上运行,并且groovy脚本(显然)只在主服务器上运行。

3 个答案:

答案 0 :(得分:6)

如果您需要"描述"数据(即您不能只使用现有的$GIT_BRANCH$GIT_COMMIT环境变量),您可以添加一个"执行shell步骤"用:

echo GIT_DESCRIBE=$(git describe) > git.properties

然后,添加一个EnvInject构建步骤,该步骤从git.properties文件中注入属性。

答案 1 :(得分:0)

我尝试按照克里斯托弗奥尔概述的步骤,但我的"执行shell"脚本似乎只在构建开始后运行。在我的情况下,GIT_DESCRIBE从未设置/注入,以便构建使用它。

经过一段时间的研究,我找到了一个使用"评估的Groovy脚本的解决方案"步骤作为Environment Injector插件的一部分。 Groovy脚本在预构建时进行评估。但主要的警告是.groovy脚本不在$ WORKSPACE中运行。我最终做的是从.groovy脚本执行位于我的应用程序($ WORKSPACE)中的shell脚本,并将其输出作为带有GIT_DESCRIBE的地图返回。

评估的Groovy脚本

def sout = new StringBuilder()
def serr = new StringBuilder()
def proc = "$WORKSPACE/git-describe.sh".execute()
proc.waitForProcessOutput(sout, serr)
def map = [GIT_DESCRIBE: sout.toString()]
return map

git-describe.sh

#! /bin/bash

# change working directory to the current script's directory
cd "${0%/*}"

echo `git describe`

从那里你应该可以在你的" Build name"中引用GIT_DESCRIBE。宏。

${ENV, var="GIT_DESCRIBE"}

答案 2 :(得分:0)

使用build-name-setter插件v1.6.7,可以执行以下操作:

  • “执行shell”构建步骤,执行git describe >version.txt

  • “更新构建名称”构建步骤,它从version.txt获取构建名称。