Подтвердить что ты не робот

Получите доступ к сборке Changelog в Jenkins

Я вытаскиваю свои волосы, пытаясь найти способ включить список изменений, сгенерированных Дженкинсом (из SVN pull) в наши заметки Testflight. Я использую плагин Testflight, у которого есть поле для заметок, но, похоже, не существует какого-либо paramater/токена, который создает jenkins для встраивания этой информации.

Неужели кому-то удавалось добиться чего-то подобного?

4b9b3361

Ответ 1

Похоже, что TestFlight Plugin расширяет переменные, помещенные в поле "Примечания к сборке", поэтому вопрос: как мы можем получить изменения для текущей сборки в переменной среды?

Насколько мне известно, плагин Subversion не предоставляет эту информацию через переменную окружения. Тем не менее, все плагины Jenkins SCM интегрируют информацию изменений, как вы можете видеть через ссылку "Изменения" в веб-интерфейсе для каждой сборки.

Эта информация также доступна через API Jenkins, даже когда выполняется сборка.

Например, если вы добавите шаг сборки "Выполнение оболочки", где вы запустите эту команду:

curl -s "http://jenkins/job/my-job/$BUILD_NUMBER/api/xml?wrapper=changes&xpath=//changeSet//comment"

Вы получите XML-документ, похожий на этот:

<changes>
  <comment>First commit.</comment>
  <comment>Second commit.</comment>
</changes>

Затем вы можете отформатировать эту информацию, как вам нравится, и поместить ее в переменную среды, которая затем может быть указана в разделе "Build Notes" в TestFlight.

Однако установка переменной среды на этапе сборки не является постоянной по умолчанию — для этого требуется использовать EnvInject Plugin.

В этом случае вы можете написать свой текст изменений в временном файле с содержимым, например:

CHANGELOG="New in this build:\n- First commit.\n- Second commit."

Затем, используя шаг сборки с параметром "Свойства файла свойств" для загрузки этого файла, переменная $CHANGELOG будет существовать в вашем и сохраняться до конца сборки, что позволяет использовать его в поле "Примечания к сборке".


Примечание. Я сам не использовал плагин TestFlight (хотя я быстро просмотрел код), и я тестировал API изменений только с репозиторией Git. Аналогично, я не тестировал, как новые строки должны быть закодированы с помощью EnvInject-плагина, поэтому это может вызвать проблемы.

Ответ 2

Учитывая, что журнал Jenkins изменил формат, я обновил XML-контент с исходного сообщения. Кроме того, поскольку оригинальный TestFlight умер, а плагин теперь устарел, я перетаскиваю содержимое в HTML файл для использования с HockeyKit. Это действительно текстовый файл WITH line breaks. Выполнение разрывов строк вставки sed происходит..., и строка выглядит очень запутанной (по крайней мере для меня) с первого взгляда.

#for distribution in projects
Changelog=$(curl "${BUILD_URL}api/xml?wrapper=changes&xpath=//changeSet//item//msg" | sed -e "s/<\/msg>//g; s/<msg>/\\`echo -e '\r'`/g; s/<\/*changes>//g" )

# Write result to properties file
echo -e "$Changelog" > "${BuildDestinationPath}/"${BUILD_NUMBER}.html

Примечание. Редактирование: BuildDestinationPath и Changelog являются моими локальными переменными. Переменные в шапках - это переменные среды Jenkins и должны существовать при любой установке.

Ответ 4

Я сделал несколько примеров python, которые скрывают xml для CHANGELOGS

note.xml должен быть

<changes>
      <msg>First commit.</msg>
      <msg>Second commit.</msg>
</changes>

действительный код python ниже

from xml.etree.ElementTree import parse
tree = parse("note.xml")
root = tree.getroot()
sentence = 'CHANGELOG =\"' 
cnt = 1
for element in root.findall('msg'):
    tempstring = element.text
    tempstring =str(cnt)+'. '+'\\n'.join(tempstring.splitlines())
    sentence =sentence +tempstring +'\\n'
    cnt = cnt +1
sentence = sentence + '\"'
print sentence

Ответ 5

Фактически, вы можете получить доступ к этой информации до завершения фазы сборки, прочитав/проанализировав файл.. /builds/ $BUILD_NUMBER/changelog.xml внутри папки сборки. Этот файл создается с помощью запуска SVN/ GIT, а не с завершением фазы сборки или post_build. Это означает, что вы можете проанализировать его в начале фазы сборки того же задания с помощью script и вставить данные в переменные env.

Это, если вы не хотите использовать завиток и XML.