2010-05-09 74 views
10

我正在使用Phing在Hudson中完成後期構建任務。如何生成changelog:自上次Hudson構建後的git日誌?

我想生成自上次成功Hudson構建以來包含所有提交的更新日誌。但看起來哈德森既沒有哈德森也沒有Git插件不提供%last_build_time%變量。

這將是令人滿意的解決方案,(但如何獲取時間):

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

我看到現在從作業XML文件中提取的唯一辦法,但我不知道這是否Phing可能。

如何生成變更日誌?

回答

7

我已經使用bash提取一次成功的構建日期:

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

(XML文件中我曾與&quote;實體,以取代")。

14

@ takeshin的答案是好的,如果你有權訪問build.xml文件,但這可能會中斷,特別是如果你正在建立一個從屬節點(因爲奴隸沒有引用的build.xml)。

不要怕,因爲你可以通過詹金斯直接訪問這些信息,利用其遠程訪問API:

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腳本來檢索詹金斯最後一次正確的修改散列:

#!/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 

乾杯,

Levi

+0

+1 - 好多瞭解答案 – 2014-05-14 22:38:17