#github #jenkins #release
#github #дженкинс #выпуск
Вопрос:
Я ищу способ загрузить артефакт сборки в качестве релиза Github в Jenkins в качестве действия после сборки или издателя — аналогично публикации поверх.
Это пока не поддерживается плагином Github для Jenkins (JENKINS-18598).
Я изучал плагин postbuild-task, но, похоже, он не поддерживает переменные среды (что, я полагаю, было бы полезно для предотвращения регистрации моего токена API в выходных данных сборки).
Кто-нибудь уже это сделал? Какой был бы хороший способ решить это с помощью Jenkins? Загрузка через cURL или клиент CLI (например, github-release на базе Go).
Ответ №1:
Я решил проблему с помощью инструмента github-release. Работает как шарм и очень просто.
- Добавьте соответствующие параметры в сборку
- Добавьте сценарий оболочки к своим шагам после сборки
- Введите этот код:
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:
Я думаю, вы на верном пути!
- Добавьте плагин post build task в Jenkins
- Используйте опцию «Запускать скрипт, только если все предыдущие шаги были успешными»
- Я бы создал параметры Jenkins для названия релиза, названия тега и т.д. И сохранил бы их вместе с вашими учетными данными В файл в качестве последнего шага в процессе сборки (перед выполнением задачи после сборки).
- Добавьте короткий скрипт на этапе задачи post build, который вызывает API Github:
- Установите переменные среды из вашего сохраненного файла и удалите его
- ОПУБЛИКОВАТЬ CURL для https://developer.github.com/v3/repos/releases/#create-a-release (Вы могли бы использовать плагин Jenkings Groovy post build вместо плагина post build task и получить доступ к переменным среды, не сохраняя их в файл, но это добавило бы столько сложности, что не стоит использовать этот плагин.)
- СКРУЧИВАЙТЕ СООБЩЕНИЕ, чтобы загрузить артефакт: https://developer.github.com/v3/repos/releases/#upload-a-release-asset
Комментарии:
1. Спасибо за ваши наброски, это было то, что я в основном имел в виду. Я пробовал использовать Groovy скрипт после сборки (используя HTTPBuilder ), но это завершается неудачей . Мне придется использовать версию CURL, а также попытаться установить переменные среды.