Как создать журнал изменений: git журнал с момента последнего создания Hudson?

Я использую Phing для выполнения задач построения сборки в Hudson.

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

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

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

Единственный способ, который я вижу сейчас, - извлечь его из файла задания xml, но я не знаю, возможно ли это с помощью Phing.

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

Ответ 1

Я извлек последнюю успешную дату сборки, используя bash:

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

(В xml файле мне пришлось заменить " на объект &quote;).

Ответ 2

Ответ @takeshin в порядке, если у вас есть доступ к файлу build.xml, но это может сломаться, особенно если вы строите на подчиненном устройстве node (так как ведомое устройство не имеет ссылки на 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|'

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

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

Леви