【问题标题】:In Hudson, how do I get the current build's git commit sha?在 Hudson,我如何获得当前构建的 git commit sha?
【发布时间】:2011-07-27 12:39:56
【问题描述】:

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

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

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

指针/示例会很有帮助,因为我是哈德逊菜鸟。

谢谢

【问题讨论】:

  • 使用 GIT_COMMIT 环境变量

标签: git hudson


【解决方案1】:

我添加到 Post build 命令:

环境

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

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

【讨论】:

  • 你能澄清一下这个命令是什么意思吗?这是一个实际的构建后选项吗?如果是这样,您使用的是什么版本的詹金斯。
  • 澄清上面所说的ajozwik。从技术上讲,他的解决方案不是 Postbuild 操作,因为这在 jenkins 中具有特定含义。相反,最后一个构建操作应该是“注入环境变量”。在该步骤中,“注入的构建属性”应该是“env”。在这种情况下,是 Jenkins 维护的环境变量的集合。
  • env 命令只打印所有环境变量。就是这样。问题是如何读取与 SVN_REVISION 类似的变量。所以你看到变量是 GIT_COMMIT。
  • GIT_BRANCH 实际上返回origin/master,有没有办法只得到master
  • 查看所有可用的环境变量添加到执行 shell 字段:printenv 现在控制台输出将显示所有可用的变量。
【解决方案2】:

Jenkins 版本: 2.46.2

Git 客户端: 2.4.5

shell 运行env 命令可以使用以下GIT 变量。

  • GIT_BRANCH
  • GIT_COMMIT
  • GIT_PREVIOUS_COMMIT
  • GIT_PREVIOUS_SUCCESSFUL_COMMIT
  • GIT_URL

因此,要将它们注入到 Job 的环境变量中,请将单词 env 添加到 Script Content 部分...

tl;博士

Job > Configure > Build Environment > Inject environment variables to the build process > Script Content

【讨论】:

  • Jenkins-Pipelines 中有类似的东西吗?
  • 我已经好几年没碰过这个插件了……如果你想把它改编成管道,代码就在那里?
【解决方案3】:

可能很晚,但您可以使用 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 分支。

【讨论】:

  • 几乎对我有用。无论出于何种原因,我在响应中看到了 3 个不同的 SHA1;有些不适用于同一个存储库。我们的设置可能有点奇怪。
【解决方案4】:

您可以在 Hudson 作业中添加一个额外的步骤,将新创建的 git 提交发布到构建/测试服务器上的第二个存储库。
第二个 repo 可以有一个 post-receive 挂钩,自动将所说的提交推送到 QA 服务器。

如果您不想要额外的间接层,那么您需要在额外的步骤中使用 git 命令来查询 HEAD 的 SHA1:git describegit rev-parse
您在问题“Saving Git SHA1 when building with Hudson similar to the CVS_BRANCH tag for CVS.”中还有其他 git 选项

【讨论】:

  • 我不能像使用 SVN_REVISION 的 svn 那样使用一些环境变量来获得成功的提交 sha 吗?我们正在使用标准的 git 插件 for hudson。
  • @SharePoint 新手:我已经用其他选项更新了我的答案。
【解决方案5】:

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

【讨论】:

  • 它现在可用,您可以使用 GIT_COMMIT 环境变量。
  • @PavanGupta 至少到 2021 年,这个变量似乎不可用。
【解决方案6】:

在Jenkins作业中,可以使用命令

git describe --always

这将返回 SHA 的前 7 个字符

问候

【讨论】:

  • 您应该使用完整的哈希值。
【解决方案7】:

在可执行外壳中已经有一个很好的解决方案。该解决方案的优点是您可以使用脚本作为构建阶段的一部分,而不是在构建后阶段。这将在下面解释。见https://stackoverflow.com/a/11837662/5842403

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

【讨论】:

    【解决方案8】:

    您可以使用 $GIT_COMMIT 代替 SVN_REVISION 。因此 env $GIT_COMMIT 将使用 Jenkins 从 Git 获取最新的提交哈希。

    【讨论】:

      猜你喜欢
      • 2018-03-04
      • 2011-05-11
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2016-12-31
      • 2016-10-06
      • 1970-01-01
      相关资源
      最近更新 更多