在Hudson中,我如何获得当前构建的git commit sha?

时间:2011-04-01 08:41:35

标签: git hudson

我们正在使用Hudson和git。我们有一个构建/测试服务器,它编译我们的项目,然后是我们需要部署的QA服务器。

我们希望获得当前构建的git commit sha并使用它来提取适当的提交以在我们的QA服务器上进行部署。

不幸的是,似乎hudon git插件没有在环境变量中设置git commit sha(例如svn插件在SVN_REVISION中执行)。我们如何解决这个问题?

指针/示例将有所帮助,因为我是哈德森诺布。

由于

8 个答案:

答案 0 :(得分:51)

我添加到Post build命令:

  

的env

在日志中我找到了所有环境变量。其中一些是:

BUILD_TAG=jenkins-Datagen-17
JOB_URL=http://jenkins:18080/job/Datagen/
USER=jenkins
GIT_COMMIT=ce9a3c1404e8c91be604088670e93434c4253f03
JENKINS_HOME=/var/lib/jenkins
JOB_NAME=Datagen
BUILD_ID=2011-06-22_15-26-06
GIT_BRANCH=master
EXECUTOR_NUMBER=0
NODE_LABELS=master
LOGNAME=jenkins
NODE_NAME=master
BUILD_NUMBER=17

答案 1 :(得分:4)

可能很晚,但您可以使用API​​在jenkins上执行此操作:

https://jenkins-server/job/job-name/lastStableBuild/api/json

这提供了一个可以解析的JSON对象。您还可以使用树选项来获取更精确的JSON字符串。像这样:

https://jenkins-server/job/job-name/lastStableBuild/api/json?tree=actions[lastBuiltRevision[branch[*]]]

现在您可以使用awk解析出SHA1和git分支。

答案 2 :(得分:3)

您可以向Hudson Job添加一个额外的步骤,将新创建的git commit发布到构建/测试服务器上的第二个repo。 第二个repo可以有一个post-receive hook自动将所述提交推送到QA服务器。

如果您不想要额外的间接层,那么您需要在额外的步骤git命令中查询HEAD的SHA1:git describegit rev-parse。 /> 问题“Saving Git SHA1 when building with Hudson similar to the CVS_BRANCH tag for CVS.

中还有其他git选项

答案 3 :(得分:3)

在Jenkin工作中,您可以使用命令

git describe --always

这将返回SHA的前7个字符

此致

答案 4 :(得分:2)

对于当前版本的git插件,这显然是不可能的。我们将当前头部写入文件并将其保存为工件。我们以后可以卷曲它并获得与给定构建相对应的提交ID。

答案 5 :(得分:2)

Jenkins版本: 2.46.2

Git客户端: 2.4.5

通过/tmp/cc4ESrx1.o: In function `parse_json': test1.c:(.text+0x2d): undefined reference to `cJSON_Parse' test1.c:(.text+0x42): undefined reference to `cJSON_GetObjectItem' test1.c:(.text+0x59): undefined reference to `cJSON_GetObjectItem' collect2: error: ld returned 1 exit status 运行env命令,可以使用以下GIT个变量。

  • GIT_BRANCH
  • GIT_COMMIT
  • GIT_PREVIOUS_COMMIT
  • GIT_PREVIOUS_SUCCESSFUL_COMMIT
  • GIT_URL

因此,要将它们重新注入Job的环境变量,请将shell添加到env部分...

TL;博士

Script Content

Example

答案 6 :(得分:1)

可执行shell中已有一个很好的解决方案。该解决方案的优势在于,您可以使用脚本而不是在构建后阶段将其作为构建阶段的一部分来执行。下面将对此进行说明。见https://stackoverflow.com/a/11837662/5842403

实际上,您可以通过读取/解析build文件夹中的../builds/$BUILD_NUMBER/changelog.xml文件,在构建阶段完成之前访问信息。此文件是使用SVN / GIT提交触发创建的,而不是在构建或post_build阶段结束时创建的。这意味着,您可以使用脚本在同一作业的构建阶段开始时解析它,并将数据插入到env变量中。

答案 7 :(得分:0)

您可以使用$ GIT_COMMIT,而不是使用SVN_REVISION。所以env $ GIT_COMMIT将使用Jenkins从Git获取最新的提交哈希。