2010-05-09 5 views
10

Я использую Phing для выполнения задач сборки в Hudson.Как создать журнал изменений: git log с момента последнего создания Hudson?

Я хочу создать журнал изменений, содержащий все фиксации с момента последней успешной сборки Hudson. Но похоже, что ни Хадсон, ни Git-плагин для Hudson не предоставляют переменную %last_build_time%.

Это было бы удовлетворительным решением, (но как получить время?):

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

Единственный способ я вижу сейчас его извлечения из файла задания XML, но я, если он не знает, возможно с Phing.

Как вы создаете свои журналы изменений?

ответ

7

Я извлек последнюю успешную дату сборки с помощью Баша:

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

(в XML-файл я должен был заменить " с &quote; лицами).

14

Ответ @ takehin в порядке, если у вас есть доступ к файлу build.xml, но это может сломаться, особенно если вы строите на подчиненном узле (так как ведомое устройство не имеет ссылочного файла build.xml).

не бойся, потому что вы можете получить доступ к этой информации через Jenkins напрямую, используя его удаленный API доступа:

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

Например:

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

(даст вам содержимое XML. .. вы могли бы заменить xml на json, чтобы получить 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|' 

Так, натягивая все это вместе, вы можете в конечном итоге с (относительно) простой скрипт, чтобы получить последнюю хорошую ревизию хэш от 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 

Приветствия ,

Levi

+0

+1 - гораздо лучший ответ –