Как составить журнал git для ожидающих изменений в TeamCIty

У меня есть агент TeamCity, настроенный для сборки моих проектов XCode, и я использую github. Я хотел бы автоматически включить в мои заметки о выпуске описания из всех ожидающих коммитов в TeamCity.

Как я могу получить их из github и хранить их в команде? Как только я помещаю их в переменную teamcity, я могу легко добавить их в мою сборку script.

Ответ 1

Вы можете использовать параметр Добавление или изменение параметра сборки из этапа сборки", чтобы обновить некоторые параметры сборки прямо с шаг сборки.

Вам понадобится шаг, который будет вызывать git log origin/master..master (см. "git: список не фиксируется до начала координат), после получения от GitHub.
(См. " Использование Team City With Git" для конфигурации TeamCity с GitHub и убедитесь, что TeamCity запущен с правильным аккаунтом)

Ответ 2

Вот как я это сделал, используя bash script:

#!/bin/bash 

curl -o lastBuild.tmp "http://localhost:8111/app/rest/buildTypes/id:bt2/builds/status:SUCCESS" --user rest:rest
last_commit=`xpath lastBuild.tmp  '/build/revisions/revision/@version'| awk -F"\"" '{print $2}'`

echo "##Last commit = $last_commit"
# prepare build notes
NOTES=`git log --pretty=format:"- %s" $last_commit..origin/master`

echo "this is it:$NOTES"

Некоторые объяснения:

  • Используйте curl для извлечения последней успешной сборки из вашей конфигурации сборки. В моем примере это bt2, обязательно замените его на свой
  • Используйте XPath/AWK для анализа ответа XML и получения последней версии git
  • Используйте git log, чтобы получить все изменения в форме последней сборки и форматировать их в любом случае. Я хотел просто получить описания фиксации.

Ответ 3

Я обнаружил пару проблем, когда я выполнил вышеупомянутый ответ, который обновляется здесь:

#!/bin/bash 

curl -o lastBuild.tmp "http://localhost:8111/app/rest/buildTypes/id:%system.teamcity.buildType.id%/builds/status:SUCCESS" --user rest:rest
last_commit=`xpath lastBuild.tmp '/build/revisions/revision/@version'| awk -F"\"" '{print $2}'`

git log --pretty=format:"- %%s" $last_commit..origin/master > changes.txt

Несколько более подробных вещей:

  • Используйте curl для извлечения последней успешной сборки из вашей конфигурации сборки. Вы можете использовать подстановку teamcity для ввода идентификатора сборки.
  • Обратите внимание, что команда curl полагается на то, что пользователь TeamCity называется rest, с паролем "rest". Предложите сменить пароль.

  • Используйте XPath/AWK для анализа ответа XML и получения последней версии git

  • Используйте git log, чтобы получить все изменения в форме последней сборки и форматировать их в любом случае. Я хотел просто получить описания фиксации и записать их в файл. Вам нужно убедиться, что файл удаляется между сборками, установив git для очистки между ними. NB: Если вы строите что-либо другое, кроме мастера, вам понадобится правильная спецификация отрасли.

  • Обратите внимание, что в опции формата git log используется%, который является маркером замещения teamcity, и, следовательно, необходимо экранировать как %%.

  • Вам нужно настроить TeamCity, чтобы сделать каталог .git доступным. См. Использование команд git на этапе сборки TeamCity

  • Изменения теперь находятся в файле changes.txt. В моем приложении (вопрос, улучшающий редактор) я использовал этот файл для отправки в crashlytics для бета-дистрибутива iOS.