将命令输出放在Jenkins构建名称中的最佳(或任何!)方法是什么?
我想将git describe
命令的输出放入Jenkins作业的构建名称中。
我已经安装了build-name-setter
插件,希望将构建名称设置为:
${ENV, var="GIT_DESCRIBE"}
我只是不知道在设置名称之前如何设置$GIT_DESCRIBE
!我尝试过使用EnvInject
插件。动态设置环境变量的唯一方法是使用groovy脚本。这可以很好地工作,除了我的工作是在一个远程奴隶上运行,并且groovy脚本(显然)只在主服务器上运行。
答案 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
获取构建名称。