如果您可以访问 build.xml 文件,@takeshin 的答案很好,但这可能会中断,特别是如果您在从节点上构建(因为从节点没有引用的 build.xml)。
不要害怕,因为您可以使用 Jenkins 的远程访问 API 直接通过 Jenkins 访问这些信息:
https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API
例如:
http://<host>/jenkins/job/<job_name>/lastSuccessfulBuild/api/xml
(将为您提供 xml 内容...例如,您可以将 xml 替换为 json 以获取 json 内容而不是 XML)。
请注意,如果您已将 Jenkins 实例设置为需要身份验证,则可能需要使用身份验证。同样,不要害怕:https ://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients
然后,将 XML 解析为您想要的内容就很简单了。像这样的东西,也许:
curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|'
因此,将它们放在一起,您最终可以得到一个(相对)简单的 shell 脚本来从 Jenkins 检索最后一个良好的修订哈希:
#!/bin/sh
GIT_LOG_FORMAT="%ai %an: %s"
USER=<username>
API_TOKEN=<api_token>
LAST_SUCCESS_URL_SUFFIX="lastSuccessfulBuild/api/xml"
#JOB_URL gets populated by Jenkins as part of the build environment
URL="$JOB_URL$LAST_SUCCESS_URL_SUFFIX"
LAST_SUCCESS_REV=$(curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|')
# Pulls all commit comments since the last successfully built revision
LOG=$(git log --pretty="$GIT_LOG_FORMAT" $LAST_SUCCESS_REV..HEAD)
echo $LOG
干杯,
列维