2010-05-09 7 views
10

Estoy usando Phing para hacer tareas de construcción posteriores en Hudson.Cómo generar changelog: registro de git desde la última compilación de Hudson?

Quiero generar un registro de cambios que contenga todas las confirmaciones desde la última versión exitosa de Hudson. Pero parece que ni el complemento Hudson ni el de Git para Hudson no proporcionan la variable %last_build_time%.

Esta sería una solución satisfactoria, (pero la forma de obtener el tiempo?):

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

La única manera que veo por ahora se lo extrae desde el archivo XML trabajo, pero no sé si es posible con Phing.

¿Cómo se generan los registros de cambios?

Respuesta

7

he extraído con éxito la última fecha de fabricación usando bash:

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

(en el archivo XML que tuvieron que reemplazar " con &quote; entidad).

14

@ La respuesta de Takehin está bien si tiene acceso al archivo build.xml, pero esto puede romperse, especialmente si está construyendo en un nodo esclavo (ya que el esclavo no tiene el build.xml referenciado).

No temas, ya que se puede acceder a esta información a través de Jenkins directamente, usando su API de acceso remoto:

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

Por ejemplo:

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

(le dará el contenido XML. ... podrías reemplazar xml con json para recuperar el contenido json en lugar de XML, por ejemplo).

OBSERVAR que puede necesitar la autenticación si configuró su instancia de Jenkins para requerirla. Nuevamente, no temas: https://wiki.jenkins-ci.org/display/JENKINS/Authenticating+scripted+clients

Luego es una simple cuestión de analizar XML para lo que quieras. Algo como esto, tal vez:

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

Así, tirando de él todos juntos, usted puede terminar con un (relativamente) simple script de shell para recuperar la última buena hash de la revisión de 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 

Saludos ,

Levi

+0

+1 - mucho mejor respuesta –

Cuestiones relacionadas