如何生成changelog:自上次Hudson构建以来的git log?

时间:2010-05-09 18:39:37

标签: git bash continuous-integration hudson phing

我正在使用Phing在Hudson做后期构建任务。

我想生成包含自上次成功构建Hudson以来所有提交的更改日志。但看起来Hudson和Hudson的Git插件都没有提供%last_build_time%变量。

这将是令人满意的解决方案,(但如何获得时间?):

git log --pretty="%s" --since="%last_build_time%"

我现在看到的唯一方法是从作业xml文件中提取它,但我不知道是否可以使用Phing。

如何生成更改日志?

2 个答案:

答案 0 :(得分:14)

如果你有权访问build.xml文件,@ takehin的答案很好,但是这可能会中断,特别是如果你在一个从属节点上构建(因为奴隶没有引用的build.xml)。

不要担心,因为您可以使用其远程访问API直接通过Jenkins访问此信息:

https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API

例如:

http://<host>/jenkins/job/<job_name>/lastSuccessfulBuild/api/xml

(将为您提供xml内容......例如,您可以用json替换xml以取回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

干杯,

列维

答案 1 :(得分:7)

我使用bash提取了上一个成功的构建日期:

git log --pretty="%s" --since="`date -r ./../lastSuccessful/build.xml "+%F %T"`"

(在xml文件中,我必须用"实体替换&quote;