Показать текущее состояние сборки Jenkins на репозитории GitHub

182

Есть ли способ показать состояние сборки Jenkins на GitHub Readme.md моего проекта?

Я использую Jenkins для запуска непрерывных интеграционных сборок. После каждого коммита он гарантирует, что все компилируется, а также выполняет модульные и интеграционные тесты, прежде чем, наконец, создать документацию и выпустить пакеты.

По-прежнему существует риск непреднамеренного совершения чего-либо, что нарушает сборку. Пользователи, посещающие страницу проекта GitHub, должны знать, что текущий мастер находится в этом состоянии.

Джаспер Блюз
источник
9
Почему за это проголосовали? Есть ли что-то очевидное в руководстве пользователя Jenkins, которое я пропустил? Я сделал Google заранее, и не мог ничего найти.
Джаспер Блюз
1
Сервер сборки Travis может делать что-то подобное, но я использую Jenkins на Osx. Вот что мне нужно: github.com/CocoaPods/CocoaPods
Джаспер Блюз,
2
Ссылка на аналогичный вопрос рекомендует Travis, который в настоящее время не поддерживает iOS и OSX, поэтому он не отвечает на вопрос.
Джаспер Блюз
4
Это не дубликат .. Трэвис! = Дженкинс
Банжокат

Ответы:

167

Хорошо, вот как вы можете настроить Jenkins для установки статусов сборки GitHub. Это предполагает, что у вас уже есть Jenkins с плагином GitHub, настроенным на сборку при каждом нажатии.

  1. Зайдите на GitHub, войдите в систему, зайдите в Настройки , Персональные токены , нажмите Создать новый токен .

    скриншот настроек GitHub

  2. Проверьте репо: статус (я не уверен, что это необходимо, но я сделал это, и у меня это сработало).

    скриншот генерации токенов GitHub

  3. Сгенерируйте токен, скопируйте его.

  4. Убедитесь, что пользователь GitHub, который вы собираетесь использовать, является сотрудником репозитория (для частных репозиториев) или членом команды с доступом по принципу push и pull (для репозиториев организации) к репозиториям, которые вы хотите создать.

  5. Зайдите на свой сервер Jenkins, войдите в систему.

  6. Управление JenkinsНастройка системы
  7. В разделе GitHub Web Hook выберите Разрешить Jenkins автоматически управлять URL-адресами подключения , затем укажите свое имя пользователя GitHub и токен OAuth , полученный на шаге 3.

    снимок экрана с глобальными настройками Jenkins

  8. Убедитесь, что он работает с кнопкой Test Credential . Сохраните настройки.

  9. Найдите задание Jenkins и добавьте Установить статус сборки на коммит GitHub к шагам после сборки

    скриншот конфигурации работы Дженкинса

Вот и все. Теперь выполните тестовую сборку и перейдите в репозиторий GitHub, чтобы проверить, работает ли он. Нажмите « Ветви» на главной странице репозитория, чтобы увидеть статусы сборки.

Сценарий главной страницы, где вы нажимаете «ветви»

Вы должны увидеть зеленые галочки:

снимок экрана веток GitHub со статусом сборки

Мариус Гедминас
источник
GitHub обновил свой рабочий процесс авторизации, пользователи больше не указывают, что разрешить, скорее приложения должны запрашивать то, что им требуется во время авторизации, и пользователь утверждает запрошенные разрешения.
Ян Воан
6
Кажется, что это не работает с Jenkins> 1.609 и плагином Github v 1.13.3 - я не могу найти опцию «Разрешить Jenkins автоматически управлять URL-адресами перехвата»
endre
2
Я согласен с @pyeleven. Я использую Jenkins LTS 1.625.3 с Github Plugin 1.16.0 и Github API Plugin 1.71. Эти параметры не отображаются. Скорее я вижу раскрывающийся список для учетных данных, но никакие учетные данные не перечислены (хотя у меня настроены учетные данные). Эти учетные данные появляются при переходе в раздел «Advance» -> «Управление дополнительными действиями Github» -> «Преобразовать логин и пароль в маркер Github».
Шехзан
4
Это кажется устаревшим; действие после сборки, о котором упоминается в этом ответе, теперь помечено как устаревшее, а второе
Daenyth
1
Теперь параметры шага после сборки были изменены. У @Alex правильный ответ.
Бибек Мантри
51

Тем временем пользовательский интерфейс Jenkins и GitHub немного изменился, и мне потребовалось некоторое время, чтобы понять, как правильно настроить Jenkins. Объяснение здесь основано на версии 2.121.1 Jenkins.

Я также предполагаю, что вы уже настроили свое задание Jenkins на запуск через веб-крючок или опрос. Вот шаги, которые я предпринял, чтобы заставить это работать:

  1. Настройте Github: создайте личный токен доступа с областью OAuth repo:status
  2. Сконфигурируйте Jenkins: Configure Systemи добавьте OAuth Secret в качестве сервера GitHub - используйте Secret Textв качестве метода аутентификации для помещения OAuth Secret.
  3. Настройте задание Jenkins: добавить Set GitHub commit statusкак действие после сборки . Установите статус результата в One of the default messages and statuses.
  4. Проверьте свой результат на GitHub: проверьте, получаете ли вы статус сборки и продолжительность выполнения сборки на вашем коммите GitHub.

Настроить Github

Создать личный токен доступа


введите описание изображения здесь


введите описание изображения здесь


введите описание изображения здесь


Настроить Дженкинс

введите описание изображения здесь


введите описание изображения здесь


введите описание изображения здесь


введите описание изображения здесь


введите описание изображения здесь


Настроить работу Дженкинс

введите описание изображения здесь


введите описание изображения здесь


введите описание изображения здесь


результат

Теперь вы увидите статус ваших коммитов и веток:

введите описание изображения здесь

Alex
источник
2
Ух ты наконец нашел решение, спасибо большое! Этот «секретный текст» запутал меня.
head01
Дженкинс, похоже, продвигает статусы, но мое частное репо не фиксирует их. Какие-либо предложения?
Патрик Майклсен,
Обновление: моя проблема была связана с конфиденциальностью моего репо. У меня должна быть проблема с настройкой учетных данных.
Патрик Майклсен
Обновление: в конце концов я обнаружил, что это работает, только если это было вызвано фактическим нажатием git. Самостоятельный запуск сборки не запускает обновление статуса правильно.
Патрик Майклсен
1
Поле Manage Hooksвыделено, но не отмечено на изображениях выше, означает ли это, что мы должны снять флажок при сохранении?
Perplexabot
37

То, что я сделал, довольно просто:

  1. Установите плагин Hudson Post Task
  2. Создайте токен личного доступа здесь: https://github.com/settings/tokens
  3. Добавьте плагин 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!\"
    }"
    
  4. Добавьте плагин 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!\"
    }"
    
  5. Вы также можете добавить вызов в ожидании в начале тестов

    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!\"
    }"
    

Снимок экрана: конфигурация задачи Post build

Natim
источник
Вы также можете сделать это из конвейера - например, вы можете просто позвонить через него shи даже использовать хранилище учетных данных JenkinswithCredentials
Иван Колмычек
Для Teamcity вы можете использовать: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim
24

Этот плагин должен работать: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Вы должны иметь возможность вставлять такие значки в ваш README.mdфайл:

построить прохождение

Koraktor
источник
6
К сожалению, похоже, что GitHub начал кэшировать эти изображения на каком-либо сервисе хостинга изображений, и теперь они отображаются неправильно.
axel22
Теперь все работает нормально, если вы правильно настроили доступ (анонимный пользователь должен видеть статус сборки)
Дмитрий Мешков
11

Commit Status API позволяет увидеть « Repo Статусы API ».

А с 26 апреля 2013 года вы теперь можете видеть статус сборки на странице ветки репозитория GitHub :

строить статус на ветках репозитория GitHub

Это означает, что это другой способ, посетив страницу проекта GitHub, чтобы увидеть эти статусы вместо того, чтобы иметь только Jenkins.

Начиная с 30 апреля 2013 года, конечная точка API для состояний фиксации была расширена, чтобы разрешить имена ветвей и тегов, а также коммиты SHA .

VonC
источник
Где я могу разместить URL для попадания? Есть ли плагин или я должен использовать локоны пользователя на этапе сборки?
Ян Воан
@IanVaughan, что ты имеешь в виду, чтобы "ударить"? Чтобы увидеть, что? Чтобы увидеть статус, это будет curl( developer.github.com/v3/repos/statuses/… )
VonC
Извините, да, я знал, что curl можно использовать, и я знал интерфейс API, это было больше из того, где поставить curl, и если нет, была доступна абстракция более высокого уровня от curl? то есть я мог бы добавить curl POST до того, как сборка начинает указывать, что коммит / PR строится, а затем один после, но все это кажется очень низким уровнем, и я надеялся, что для меня это был плагин более высокого уровня.
Ян Воан
С тех пор я нашел, что Janky, который довольно тяжел для моего сценария использования, похоже, делает то, что я хочу.
Ян Воан
7

Если у вас установлен Githubплагин Jenkins, вы можете сделать это Post build actionsследующим образом:

установить статус сборки на github

Реми Вирин
источник
4
В этом ответе отсутствуют детали: как мне создать токен доступа OAuth на GitHub, чтобы плагин GitHub использовал API, необходимые для установки статуса сборки? Какие разрешения необходимы для этого токена? Где в конфигурации Jenkins можно указать имя пользователя / токен?
Мариус Гедминас
2
Это действительно не полезно, как вы попадаете в это диалоговое окно?
Oz123
5

Добавьте строку ниже в ваш README.md и измените оба URL в соответствии с вашим проектом jenkins.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)
Kaushal
источник
Графика загружается автоматически? Кажется, это не для меня ...
HX_unbanned
Да, это не сработает. Вы должны обновить свою страницу.
Каушал
3

Что касается настройки защищенной ветки Jenkins и GitHub. Я использую Jenkins 2.6, и вот шаги, которые я сделал, чтобы заставить его работать:

На веб-странице вашего репозитория GitHub:

  1. Перейдите в Настройки> Филиалы.
  2. В разделе «Защита ветвей» щелкните меню «Выберите ветвь» и выберите ветку, которую вы хотите установить в качестве защищенной.
  3. Включите параметры по мере необходимости.

На сервере Jenkins: (Убедитесь, что у вас установлены подключаемые модули Git и GitHub)

  1. Перейдите, чтобы Управлять Jenkins> Настроить Систему.
  2. Под GitHub установите URL-адрес API для https://api.github.com . Хотя это значение по умолчанию.
  3. Выберите сгенерированный токен для учетных данных. Если вы еще не сгенерировали токен, нажмите «Дополнительно», затем «Дополнительные действия», вы можете преобразовать свой логин и пароль в токен и использовать его в качестве учетных данных.

Также убедитесь, что учетная запись GitHub, которую использует ваш Jenkins, является соавтором репозитория. Я установил это с уровнем разрешения записи.

Надеюсь это поможет.

д 'призрак
источник
2

Я следовал указаниям Алекса, и это сработало.

Но для GitHub Enterprise вам нужно изменить URL API при добавлении сервера в Jenkins.

Например, если вашей компанией является creditcard.com, ваш URL будет

https://github.creditcard.com/api/v3/

Адан Амарильяс
источник
1

Редактировать:

Я больше не использую этот подход, пожалуйста, используйте один из других ответов.

Обновление: что я в итоге сделал для нашего конкретного случая: (выше ответы были отличными - спасибо!)

Поскольку наш сервер сборки отсутствует в Интернете, у нас есть скрипт для публикации статуса сборки в ветке gh-pages в github.

  • Начало сборки марки не выполнено
  • Успешное завершение сборки штампов
  • Проект запускается после основного проекта для публикации результатов -> статус сборки, документы API, отчеты о тестировании и покрытие тестами.

GitHub кэширует изображения, поэтому мы создали файл .htaccess, который указывает короткий тайм-аут для образа состояния сборки.

Поместите это в каталог с изображением статуса сборки:

ExpiresByType image/png "access plus 2 minutes"

Вот сценарий сборки. Цель, которая публикует на gh-страницах, - '--publish.site.dry.run'

Имея менее 400 строк конфигурации, мы имеем:

  • Компилировать проверки
  • модульные и интеграционные тесты
  • Протоколы испытаний
  • Отчеты о покрытии кода
  • API Документы
  • Публикация в Github

, , и этот скрипт может быть запущен внутри или вне Jenkins, так что:

  • Разработчики могут запускать этот сценарий перед фиксацией, уменьшая вероятность поломки сборки, которая влияет на других.
  • Отказ легко воспроизвести локально.

Результаты:

Главная страница проекта имеет статус сборки, обновляется после каждой сборки, а также последние документы API, результаты тестов и покрытие тестами.

Джаспер Блюз
источник
Отличный отзыв, более точный, чем мой ответ. +1
VonC
1
Ссылка на скрипт сборки не работает
Saikat
У вас есть живая ссылка на ваш скрипт?
Ян
Перестали использовать этот подход - думаю, другие ответы будут лучше.
Джаспер Блюз