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

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

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

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

14 ответов

Решение

Хорошо, вот как вы можете настроить 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. Убедитесь, что он работает с кнопкой " Проверить учетные данные". Сохраните настройки.

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

    снимок экрана конфигурации работы Jenkins

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

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

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

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

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

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

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

Настроить Github

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


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


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


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


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

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


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


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


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


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


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

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


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


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


Результат

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

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

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

  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

Этот плагин должен работать: 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

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

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

Если у вас есть Github плагин установлен на вашем JenkinsВы можете сделать это в Post build actions как это:

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

Добавьте строку ниже в ваш 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:

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

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

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

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

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

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

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

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

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

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

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

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

Поскольку наш сервер сборки не находится в Интернете, у нас есть скрипт для публикации статуса сборки в ветке 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, и добавьте токен доступа в качестве секретных текстовых учетных данных.
  • Последний шаг — добавить настройки пост-сборки при создании конвейера.

Ресурсы:

  • Вот часть видео YT, в котором он повторяет описанные выше шаги.
  • Читать об OAuth
Другие вопросы по тегам