我需要找到将更改(由不同用户的不同提交组成)推送到远程存储库的人的 git 用户名/电子邮件。
推送通过 gitblit 触发了一个 Post-Receive 钩子,该钩子触发了 jenkins 作业,并且使用了非用户特定的 SSH 身份验证。
Jenkins 没有提供一种简单的方法来实现这一点。我遇到了类似的问题,我花了一些时间才找到合适的解决方案。
我最终使用了Git Plugin和git log的环境变量的组合。
Git Plugin 提供了两个环境变量:
GIT_COMMIT - 当前的 SHA
GIT_PREVIOUS_COMMIT - 来自同一分支的先前构建提交的 SHA(第一次构建分支的当前 SHA)
每次您的 git Web Hook 触发 Jenkins 作业时都会得到它。
另一方面,提供了使用命令选项git log
获取作者姓名和作者电子邮件的方法。format
因此,结合这两个选项,您可以使用以下命令获取触发 Jenkins 作业的先前提交: GIT_PREVIOUS_COMMIT和当前提交:GIT_COMMIT之间每个提交的作者姓名和电子邮件:git log
git log $GIT_PREVIOUS_COMMIT..$GIT_COMMIT --pretty=format:%an/%ae
在 Jenkins Job 的 Executed Shell 中。请确保您位于 git 项目的根目录中。
我不得不
.
def triggerUrl = jenkinsUrl + "/job/" + jenkinsJob + "/buildWithParameters?token=" + jenkinsToken + "&myuser=" + user.getName()
new URL(triggerUrl).getText()
myuser 现在是一个环境变量,这里以 ant 脚本为例:
<property environment="env" />
<target name="xx" description="xx">
<echo message="${env.myuser}" />
</target>