詹金斯和吉特 - 如何获得提交者的名字?

时间:2015-02-04 00:22:11

标签: git jenkins

我正在尝试将更多GIT提交信息放入HipChat会议室。

我看到有许多可以在jenkins中使用的GIT变量。我正在执行一个工作的Execute Shell步骤。

这些工作:

echo "${GIT_BRANCH}"

echo "${GIT_URL}"

echo "${GIT_COMMIT}"

这些不是:

echo "${GIT_COMMITTER_EMAIL}"

echo "${GIT_COMMITTER_NAME}"

echo "${GIT_AUTHOR_EMAIL}"

echo "${GIT_AUTHOR_NAME}"   

echo "${GIT_USER}"

问题1:上面的变量怎么行不通?

这有效:

git show --name-only

问题2:我怎么可能不知道     Foo =“git show --name-only” 并且在工作中使用Foo else,即发送给HipChat?

我看到有一个插件envInject。但这是写入执行shell步骤的工作区中的文件,然后从该文件中读取。对于我想要做的事情,这似乎有点矫枉过正。

问题3:envInject是我唯一的选择吗?

5 个答案:

答案 0 :(得分:14)

我不知道为什么有些变量是可用的而且有些变量不是,但似乎你并不是唯一一个有这个问题的变量(参见例如Git plugin for Jenkins: How do I set env variables GIT_AUTHOR_EMAIL and GIT_COMMITTER_EMAIL?)。 / p>

使用例如git show -s --pretty=%an获取作者姓名并通过命令替换将其存储在变量中,如@MattKneiser所述:

foo=$(git show -s --pretty=%an)

此变量在Jenkins作业的其他shell步骤中不可用,但您可以将其保存到工作区中的文件中,

echo "foo=\"$foo\"" > $WORKSPACE/envvars

然后在另一个shell中获取该文件:

. $WORKSPACE/envvars

答案 1 :(得分:0)

您需要显式执行该git命令并将其输出放入变量中。在bash中,这称为command substitution

foo=$(git show --name-only)

答案 2 :(得分:0)

如果您使用的是gerrit触发器插件,您可以获得以下信息: $ {GERRIT_CHANGE_OWNER}或$ {GERRIT_CHANGE_OWNER_NAME},否则,请尝试使用@Matt提到的方式,只需在您想要使用此变量之前在您的jenkins中创建一个简单的shell脚本,然后读取它,将其注入文件中,稍后您就可以了将它用作普通参数。

答案 3 :(得分:0)

在您的jenkinsfile中使用此功能:

def author = ""
def changeSet = currentBuild.rawBuild.changeSets               
for (int i = 0; i < changeSet.size(); i++) 
{
   def entries = changeSet[i].items;
   for (int i = 0; i < changeSet.size(); i++) 
            {
                       def entries = changeSet[i].items;
                       def entry = entries[0]
                       author += "${entry.author}"
            } 
 }
 print author;

答案 4 :(得分:0)

我这样做的方法

script{
 def COMMITTER_EMAIL = bat(
    script: "git --no-pager show -s --format='%%ae'",
    returnStdout: true).split('\r\n')[2].trim() 
    echo "COMMITTER_EMAIL: ${COMMITTER_EMAIL}" 
}