Загрузить артефакт сборки на Github как релиз в Jenkins

#github #jenkins #release

#github #дженкинс #выпуск

Вопрос:

Я ищу способ загрузить артефакт сборки в качестве релиза Github в Jenkins в качестве действия после сборки или издателя — аналогично публикации поверх.

Это пока не поддерживается плагином Github для Jenkins (JENKINS-18598).

Я изучал плагин postbuild-task, но, похоже, он не поддерживает переменные среды (что, я полагаю, было бы полезно для предотвращения регистрации моего токена API в выходных данных сборки).

Кто-нибудь уже это сделал? Какой был бы хороший способ решить это с помощью Jenkins? Загрузка через cURL или клиент CLI (например, github-release на базе Go).

Ответ №1:

Я решил проблему с помощью инструмента github-release. Работает как шарм и очень просто.

  1. Добавьте соответствующие параметры в сборку
  2. Добавьте сценарий оболочки к своим шагам после сборки
  3. Введите этот код:
 echo "Compressing artifacts into one file"
zip -r artifacts.zip artifacts_folder

echo "Exporting token and enterprise api to enable github-release tool"
export GITHUB_TOKEN=$$$$$$$$$$$$
export GITHUB_API=https://git.{your domain}.com/api/v3 # needed only for enterprise

echo "Deleting release from github before creating new one"
github-release delete --user ${GITHUB_ORGANIZATION} --repo ${GITHUB_REPO} --tag ${VERSION_NAME}

echo "Creating a new release in github"
github-release release --user ${GITHUB_ORGANIZATION} --repo ${GITHUB_REPO} --tag ${VERSION_NAME} --name "${VERSION_NAME}"

echo "Uploading the artifacts into github"
github-release upload --user ${GITHUB_ORGANIZATION} --repo ${GITHUB_REPO} --tag ${VERSION_NAME} --name "${PROJECT_NAME}-${VERSION_NAME}.zip" --file artifacts.zip
  

Комментарии:

1. Для этого действительно должен быть плагин Jenkins с поддержкой Jenkins pipeline…

2. Спасибо! Но как вы добавляете этот инструмент в конвейер Jenkins?

3. вы можете загрузить двоичные файлы здесь и разместить их на своем сервере Jenkins: github.com/github-release/github-release/releases/tag/v0.9.0

Ответ №2:

Я думаю, вы на верном пути!

  1. Добавьте плагин post build task в Jenkins
  2. Используйте опцию «Запускать скрипт, только если все предыдущие шаги были успешными»
  3. Я бы создал параметры Jenkins для названия релиза, названия тега и т.д. И сохранил бы их вместе с вашими учетными данными В файл в качестве последнего шага в процессе сборки (перед выполнением задачи после сборки).
  4. Добавьте короткий скрипт на этапе задачи post build, который вызывает API Github:
  5. Установите переменные среды из вашего сохраненного файла и удалите его
  6. ОПУБЛИКОВАТЬ CURL для https://developer.github.com/v3/repos/releases/#create-a-release (Вы могли бы использовать плагин Jenkings Groovy post build вместо плагина post build task и получить доступ к переменным среды, не сохраняя их в файл, но это добавило бы столько сложности, что не стоит использовать этот плагин.)
  7. СКРУЧИВАЙТЕ СООБЩЕНИЕ, чтобы загрузить артефакт: https://developer.github.com/v3/repos/releases/#upload-a-release-asset

Комментарии:

1. Спасибо за ваши наброски, это было то, что я в основном имел в виду. Я пробовал использовать Groovy скрипт после сборки (используя HTTPBuilder ), но это завершается неудачей . Мне придется использовать версию CURL, а также попытаться установить переменные среды.