2010-05-09 11 views
10

Sto utilizzando Phing per svolgere attività di post-produzione in Hudson.Come generare il log delle modifiche: git log dall'ultima generazione di Hudson?

Voglio generare il registro delle modifiche contenente tutti i commit dall'ultima build di successo di Hudson. Ma sembra che né Hudson né Git plugin per Hudson non forniscano la variabile %last_build_time%.

Questa sarebbe una soluzione soddisfacente, (ma come ottenere il tempo?):

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

L'unico modo che vedo per ora è l'estrazione dal file di lavoro XML, ma non so se è possibile con Phing.

Come si generano i registri delle modifiche?

risposta

7

ho estratto ultimo successo Realizzato utilizzando bash:

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

(Nel file xml ho dovuto sostituire " con &quote; entità).

14

@ la risposta di takeshin va bene se si ha accesso al file build.xml, ma questo potrebbe interrompersi, specialmente se si sta costruendo su un nodo slave (poiché lo slave non ha il build.xml di riferimento).

Non temere, in quanto è possibile accedere a queste informazioni tramite Jenkins direttamente, utilizzando il suo api accesso remoto:

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

Ad esempio:

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

(vi darà il contenuto XML. .. è possibile sostituire xml con json per ottenere il contenuto JSON indietro invece di XML, ad esempio).

NOTA che potrebbe essere necessario utilizzare l'autenticazione se è stata configurata l'istanza Jenkins per richiederla. Ancora una volta, non temere: https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients

Quindi è sufficiente analizzare l'XML per quello che vuoi. Qualcosa di simile, forse:

curl --silent --user $USER:$API_TOKEN $URL | grep "<lastBuiltRevision>" | sed 's|.*<lastBuiltRevision>.*<SHA1>\(.*\)</SHA1>.*<branch>.*|\1|' 

Quindi, tirando tutti insieme, si può finire con un (relativamente) semplice script di shell per recuperare l'ultima buona hash di revisione da 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 

Acclamazioni ,

Levi

+0

+1 - molto migliore risposta –