我正在使用Phing在Hudson做后期构建任务。
我想生成包含自上次成功构建Hudson以来所有提交的更改日志。但看起来Hudson和Hudson的Git插件都没有提供%last_build_time%
变量。
这将是令人满意的解决方案,(但如何获得时间?):
git log --pretty="%s" --since="%last_build_time%"
我现在看到的唯一方法是从作业xml文件中提取它,但我不知道是否可以使用Phing。
如何生成更改日志?
答案 0 :(得分:14)
不要担心,因为您可以使用其远程访问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文件中,我必须用"
实体替换"e;
。