1

我需要找到将更改(由不同用户的不同提交组成)推送到远程存储库的人的 git 用户名/电子邮件。

推送通过 gitblit 触发了一个 Post-Receive 钩子,该钩子触发了 jenkins 作业,并且使用了非用户特定的 SSH 身份验证。

4

2 回答 2

3

Jenkins 没有提供一种简单的方法来实现这一点。我遇到了类似的问题,我花了一些时间才找到合适的解决方案。

我最终使用了Git Plugingit 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 项目的根目录中。

于 2016-12-15T12:01:54.737 回答
1

我不得不

  1. 定义一个 gitblit 用户并将其用于推送更改。
  2. 将我的詹金斯作业更改为参数化作业并为用户名(myuser)定义一个参数。
  3. 在我的钩子中添加用户名

.

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>
于 2016-12-19T12:44:48.180 回答