Показать текущее состояние сборки Jenkins на репозитории GitHub
Есть ли способ показать состояние сборки Jenkins на GitHub Readme.md моего проекта?
Я использую Jenkins для запуска непрерывных интеграционных сборок. После каждого коммита он гарантирует, что все компилируется, а также выполняет модульные и интеграционные тесты, прежде чем, наконец, создать документацию и выпустить пакеты.
По-прежнему существует риск непреднамеренного совершения чего-либо, что нарушает сборку. Пользователи, посещающие страницу проекта GitHub, должны знать, что текущий мастер находится в этом состоянии.
14 ответов
Хорошо, вот как вы можете настроить Jenkins для установки статусов сборки GitHub. Это предполагает, что у вас уже есть Jenkins с плагином GitHub, настроенным на сборку при каждом нажатии.
Зайдите на GitHub, войдите в систему, зайдите в Настройки, Персональные токены, нажмите Создать новый токен.
Проверьте репо: статус (я не уверен, что это необходимо, но я сделал это, и у меня это сработало).
Сгенерируйте токен, скопируйте его.
Убедитесь, что пользователь GitHub, который вы собираетесь использовать, является соавтором репозитория (для частных репозиториев) или членом команды с доступом по принципу push и pull (для репозиториев организации) к репозиториям, которые вы хотите создать.
Зайдите на свой сервер Jenkins, войдите в систему.
- Управление Jenkins → Настройка системы
В разделе GitHub Web Hook выберите Разрешить Jenkins автоматически управлять URL-адресами подключения, затем укажите свое имя пользователя GitHub и токен OAuth, полученный на шаге 3.
Убедитесь, что он работает с кнопкой " Проверить учетные данные". Сохраните настройки.
Найдите задание Jenkins и добавьте Установить статус сборки на коммит GitHub к шагам после сборки
Вот и все. Теперь выполните тестовую сборку и перейдите в репозиторий GitHub, чтобы проверить, работает ли он. Нажмите " Ветви" на главной странице репозитория, чтобы увидеть статусы сборки.
Вы должны увидеть зеленые галочки:
Тем временем пользовательский интерфейс Jenkins и GitHub немного изменился, и мне потребовалось некоторое время, чтобы понять, как правильно настроить Jenkins. Объяснение здесь основано на версии 2.121.1 Jenkins.
Я также предполагаю, что вы уже настроили свою работу Jenkins на запуск через веб-крючок или опрос. Вот шаги, которые я предпринял, чтобы заставить это работать:
- Настройте Github: создайте личный токен доступа с областью OAuth
repo:status
- Настройте Дженкинс:
Configure System
и добавьте OAuth Secret в качестве сервера GitHub - используйтеSecret Text
в качестве метода аутентификации, чтобы поместить там секрет OAuth. - Настройте свою работу Дженкинс: Добавить
Set GitHub commit status
как действие после постройки. Установите статус результата вOne of the default messages and statuses
, - Проверьте свой результат на GitHub: проверьте, получаете ли вы статус сборки и продолжительность выполнения сборки на вашем коммите GitHub.
Настроить Github
Настроить Дженкинс
Настроить работу Дженкинс
Результат
Теперь вы увидите статус ваших коммитов и веток:
То, что я сделал, довольно просто:
- Установите плагин Hudson Post Task
- Создайте токен личного доступа здесь: https://github.com/settings/tokens
Добавьте плагин Post Task, который всегда приносит успех
curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{ \"state\": \"success\", \"target_url\": \"${BUILD_URL}\", \"description\": \"The build has succeeded!\" }"
Добавьте плагин Post Task, который будет сообщать об ошибке, если "пометить сборку как отказ"
curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{ \"state\": \"failure\", \"target_url\": \"${BUILD_URL}\", \"description\": \"The build has failed!\" }"
Вы также можете добавить вызов в ожидании в начале тестов
curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{ \"state\": \"pending\", \"target_url\": \"${BUILD_URL}\", \"description\": \"The build is pending!\" }"
Этот плагин должен работать: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin
Вы должны иметь возможность вставлять такие значки в ваш README.md
файл:
Есть также этот плагин, который даст вам URL-адрес значка, который вы можете опубликовать в вашем README.md, и выглядит так
https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin
API состояния фиксации позволяет увидеть " API статусов репо ".
А с 26 апреля 2013 года вы теперь можете видеть статус сборки на странице ветки репозитория GitHub:
Это означает, что это еще один способ, посетив страницу проекта GitHub, чтобы увидеть эти статусы вместо того, чтобы иметь только Jenkins.
Начиная с 30 апреля 2013 года, конечная точка API для состояний фиксации была расширена, чтобы разрешить имена ветвей и тегов, а также коммиты SHA.
Если у вас есть Github
плагин установлен на вашем Jenkins
Вы можете сделать это в Post build actions
как это:
Добавьте строку ниже в ваш README.md и измените оба URL-адреса в соответствии с вашим проектом jenkins.
[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
для трубопроводных проектов вы можете использовать пост раздел следующим образом:
void setBuildStatus(String message, String state) {
step([
$class: "GitHubCommitStatusSetter",
reposSource: [$class: "ManuallyEnteredRepositorySource", url: "https://github.com/my-user/my-repo"],
contextSource: [$class: "ManuallyEnteredCommitContextSource", context: "ci/jenkins/build-status"],
errorHandlers: [[$class: "ChangingBuildStatusErrorHandler", result: "UNSTABLE"]],
statusResultSource: [ $class: "ConditionalStatusResultSource", results: [[$class: "AnyBuildResult", message: message, state: state]] ]
]);
}
pipeline {
agent any
triggers {
githubPush()
}
stages {
stage('Hello') {
steps {
echo 'Hello World'
}
}
}
post {
success {
setBuildStatus("Build succeeded", "SUCCESS");
}
failure {
setBuildStatus("Build failed", "FAILURE");
}
}
}
Просто измените https://github.com/my-user/my-repo, чтобы соответствовать вашему репозиторию github.
Что касается настройки защищенной ветки Jenkins и GitHub. Я использую Jenkins 2.6, и вот шаги, которые я сделал, чтобы заставить его работать:
На веб-странице вашего репозитория GitHub:
- Перейдите в Настройки> Филиалы.
- В разделе "Защита ветвей" щелкните меню "Выберите ветвь" и выберите ветвь, которую вы хотите установить в качестве защищенной.
- Включите параметры по мере необходимости.
На сервере Jenkins: (Убедитесь, что у вас установлены подключаемые модули Git и GitHub)
- Перейдите, чтобы Управлять Jenkins> Настроить Систему.
- Под GitHub установите URL-адрес API для https://api.github.com/. Хотя это значение по умолчанию.
- Выберите сгенерированный токен для учетных данных. Если вы еще не сгенерировали токен, нажмите "Дополнительно", затем "Дополнительные действия", вы можете преобразовать свой логин и пароль в токен и использовать его в качестве учетных данных.
Также убедитесь, что учетная запись GitHub, которую использует ваш Jenkins, является соавтором репозитория. Я установил это с уровнем разрешения записи.
Надеюсь это поможет.
Я следовал указаниям Alex, и это сработало.
Но для GitHub Enterprise вам нужно изменить URL API при добавлении сервера в Jenkins.
Например, если ваша компания - creditcard.com, ваш URL будет
Редактировать:
Я больше не использую этот подход, пожалуйста, используйте один из других ответов.
Обновление: что я в итоге сделал для нашего конкретного случая: (выше ответы были отличными - спасибо!)
Поскольку наш сервер сборки не находится в Интернете, у нас есть скрипт для публикации статуса сборки в ветке gh-pages в github.
- Начало сборки марки не выполнено
- Успешное завершение сборки штампов
- Проект запускается после основного проекта для публикации результатов -> статус сборки, документы API, отчеты о тестировании и покрытие тестами.
GitHub кэширует изображения, поэтому мы создали файл.htaccess, который указывает короткий тайм-аут для образа состояния сборки.
Поместите это в каталог с изображением статуса сборки:
ExpiresByType image/png "access plus 2 minutes"
Вот сценарий сборки. Цель, которая публикует на gh-страницах, - '--publish.site.dry.run'
Имея менее 400 строк конфигурации, мы имеем:
- Компилировать проверки
- модульные и интеграционные тесты
- Протоколы испытаний
- Отчеты о покрытии кода
- API Документы
- Публикация в Github
, , и этот скрипт может быть запущен внутри или вне Jenkins, так что:
- Разработчики могут запускать этот сценарий перед фиксацией, уменьшая вероятность поломки сборки, которая влияет на других.
- Отказ легко воспроизвести локально.
Результаты, достижения:
Главная страница проекта имеет статус сборки, обновляется после каждой сборки, а также последние документы API, результаты тестов и покрытие тестами.
Недавно обновляет ваш статус фиксации на Github (как описано выше @vonc), к сожалению, им еще предстоит реализовать API статуса Repo
Добавляя к этому ответу , а также к этому , они ответили на вопрос, но не дали нам должного представления о проблеме.
Итак, вот мои догадки:
- Нам нужно добавить статус в нашу фиксацию GitHub, этот статус основан на результатах нашей сборки Jenkins.
- Для этого нам нужно предоставить Jenkins доступ к API GitHub, а не к репозиторию, мы делаем это через OAuth, мы можем создать токен, идущий к
GH settings -> Developer settings -> Personal access tokens
затем для публичного репо GH просто проверьте репо: статус, а для частного репо проверьте весь раздел репо - После создания токена доступа вам необходимо добавить его на ваш сервер Jenkins:
- Скопируйте и вставьте токен доступа в настройки раздела плагина GitHub в настройках ur Jenkins .
- Создайте сервер GH, по умолчанию это api.github.com, и добавьте токен доступа в качестве секретных текстовых учетных данных.
- Последний шаг — добавить настройки пост-сборки при создании конвейера.
Ресурсы: