Как я могу сделать Jenkins CI с Git триггером на толчках, чтобы освоить?

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

Я читал вики Дженкинса и пару уроков, но эта конкретная деталь отсутствует... может быть, это как-то связано с опросом? Или нужно работать на стороне Git, чтобы Git запускал Дженкинса только при смене master?

Ответ 1

Как уже отмечал gezzed в своем комментарии, между тем есть хорошее решение (описанное в опросе должно умереть: запуск сборок Jenkins из хука Git):

  • Установите триггер построения задания Jenkins на Опрос SCM, но не указывайте расписание.

  • Создайте триггер GitHub после получения, чтобы уведомить URL

    http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>?token=<get token from git to build remotely>
    
  • Это запустит все сборки, которые опрашивают указанный Git-репозиторий.

  • Однако опрос фактически проверяет, было ли что-либо передано в использованную ветку.

Работает отлично.

Ответ 3

Вместо того чтобы запускать сборки удаленно, измените конфигурацию проекта Jenkins, чтобы запускать сборки путем опроса.

Jenkins может опрашивать на основе фиксированного внутреннего или по URL. Последнее - это то, что вы хотите пропустить, если нет изменений для этой ветки. Точные детали в документации. По сути, вам просто нужно проверить опцию "Опрос SCM", оставить раздел расписания пустым и установить удаленный URL-адрес, чтобы нажать JENKINS_URL/job/name/polling.

Если у вас есть защищенная среда Jenkins, в отличие от /build, URL-адрес /polling требует аутентификации. Инструкции здесь содержат детали. Например, у меня есть перехват GitHub Post-Receive, идущий к username:[email protected]_URL/job/name/polling.

Ответ 4

Для GitLab используйте эти шаги:

  1. Зайдите в настройки вашего проекта → Веб-хуки
  2. Введите URL-адрес "Build Now" из проекта Jenkins в качестве URL-адреса Push-события:

    http://server.com/jenkins/job/project_name/build?delay=0sec например

  3. Нажмите Add Web Hook и затем test hook

Затем каждый раз, когда вы фиксируете репозиторий, запускается веб-ловушка и создается сборка. Обязательно установите рабочее пространство Jenkins для delete workspace before each build чтобы вы получили свежую копию нового кода.

Ответ 5

Не относится к Git, но ниже я подробно расскажу о конфигурации работы Jenkins с Mercurial. Это может помочь другим с подобной проблемой.

  1. Установите плагин URL Trigger
  2. Перейдите на страницу конфигурации задания и выберите опцию Poll SCM. Установите значение * * * * *
  3. Установите флажок: [URLTrigger] - Poll with a URL. Теперь вы можете выбрать некоторые параметры, такие как изменение даты изменения, содержание URL и т.д.
  4. В параметрах выберите Изменение содержимого URL, выберите первый вариант - Monitor change of content
  5. Сохраните изменения.

Теперь запустите некоторые изменения в репозитории Mercurial с помощью некоторых проверочных проверок.

Убедитесь, что задание Jenkins теперь выполняется путем обнаружения изменений в SCM. Когда сборка запускается из-за изменений Mercurial, вы увидите текст " Started by an SCM change. Иначе, пользователь, который запустил его вручную.

Ответ 6

Вам необходимо указать ветку. По умолчанию он слушает что угодно. Смотрите сообщение в блоге Hudson: плагины Git и Maven.

Ответ 7

Надеюсь, это поможет: как запустить сборку Jenkins на коммите Git

Это просто вопрос использования curl для запуска задания Jenkins с использованием хитов Git, предоставляемых Git.

Команда curl http://localhost:8080/job/someJob/build?delay=0sec может запустить задание Jenkins, где someJob - это имя задания Jenkins.

Найдите папку "hooks" в скрытой папке .git. Переименуйте файл "post-commit.sample" в "post-commit". Откройте его с помощью Блокнота, удалите строку ": Ничего" и вставьте в него указанную выше команду.

Это. Всякий раз, когда вы делаете коммит, Git запускает команды post-commit, определенные в файле.

Ответ 8

Непрерывная интеграция с Jenkins после отправки кода в репозиторий из команды /GUI Git:

  1. Создайте работу в Jenkins только с именем работы и выберите тип проекта фристайл. Нажмите OK. Следующая страница ничего не добавляет - просто нажмите Save.
  2. Перейдите в локальный репозиторий Git, где у вас есть исходный код, и перейдите в папку .git/hooks.
  3. Папка hooks содержит несколько файлов. Проверьте на "пост-фиксацию". Если нет, создайте файл "post-commit" без расширения файла:

    C:\work\test\\.git\hooks\post-commit
    
  4. Отредактируйте файл post-commit с помощью приведенной ниже команды. Убедитесь, что он присутствует в вашей локальной папке перехвата исходного кода.

    curl -u userName:apiToken -X POST http://localhost:8080/jenkins/job/jobName/build?token=apiToken
    

    Пример:

    curl -u admin:f1c55b3a07bb2b69b9dd549e96898384 -X POST http://localhost:8080/jenkins/job/Gitcommittest/build?token=f1c55b3a07bb2b69b9dd549e96898384
    

    5.

    userName: имя пользователя Jenkins

    jobName: имя проекта сборки

    apiToken: чтобы получить свой токен API, перейдите на страницу пользователя Jenkins (вверху справа в интерфейсе). Он доступен в меню "Настройка" в левой части страницы: "Показать токен API"

  5. Внесите изменения в исходный код и передайте код в хранилище.

  6. Ваша работа, http://localhost:8080/jenkins/job/Gitcommittest/, должна быть построена.

Ответ 9

Общий плагин Webhook Trigger может быть настроен с фильтрами для достижения этой цели.

Когда настроено с

  • Переменная с именем ref и выражением $.ref.
  • Фильтр с текстом $ref и выражением фильтра типа ^refs/heads/master$.

Затем эта работа будет запускаться при каждом нажатии на master. Нет опроса.

Вы, вероятно, хотите, чтобы дополнительные значения из webhook действительно выполняли сборку. Просто добавьте больше переменных с помощью JSONPath, чтобы выбрать то, что вам нужно.

Здесь есть несколько вариантов использования: https://github.com/jenkinsci/generic-webhook-trigger-plugin/tree/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd

Ответ 11

В моей текущей организации мы не делаем это в master, но делаем это как при разработке, так и при выпуске/ветвлении (мы используем Git Flow), чтобы генерировать сборки моментальных снимков.

Поскольку мы используем конвейер с несколькими ветвями, мы делаем это в Jenkinsfile с синтаксисом when {}...

stage {
    when { 
        expression { 
            branch 'develop'
        }
    }
}

Это подробно описано в этой записи блога: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline/#longer-pipeline.

Ответ 12

Приведенные выше ответы верны, но я обращаюсь к тем, кто новичок здесь для их простоты

особенно для настройки триггера сборки для конвейера:

Предположим, у вас есть две ветки Github: 1.master, 2.dev и Jenkinsfile (где написан конвейерный скрипт), и другие файлы доступны в каждой ветке

Настроить новый проект Pipeline (для ветки dev)

## 1. Интеграция кода с помощью git-plugin и подхода на основе cron. Необходимо установить обязательный плагин git и настроить его на свое имя и адрес электронной почты.

  1. Общий раздел. Проверьте флажок - 'Этот проект параметризован и добавьте Name- SBRANCH По умолчанию Value-' refs/remotes/origin/dev '
  2. Раздел "Построение триггеров" "Check checkbox -" Опрос SCM "и расписание в соответствии с необходимостью проверки коммитов, например," */1 * * * * ", чтобы проверять каждую минуту
  3. Раздел определения конвейера. Выбрать - конвейерный скрипт из SCM → выбрать git → URL-адрес addRepository → добавить учетные данные git → выбрать расширенный → добавить источник Name-, RefSpec- '+refs/heads/dev: refs/remotes/origin/dev '(dev - это ветка github) → ветки для сборки - $ {SBRANCH} (имя параметра из ссылки 1-й точки) → путь к сценарию—> Jenkinsfile → снять флажок Lightweightcheckout
  4. Применить—> сохранить

## 2. Интеграция кодов: подход github-plugin и webhook Предварительно необходимо установить плагин Github и настроить сервер Github, проверить соединение, если не учитывать следующую конфигурацию

Настройте плагин Github с учетной записью на Jenkins

Раздел GitHub Добавьте сервер Github, если его нет. URL-адрес API: https://api.github.com Учетные данные: Добавить секретный текст (нажмите кнопку Добавить: выберите тип секретного текста) со значением токена личного доступа (сгенерируйте его из своих учетных записей Github → настройки → Настройки разработчика—> Персональный токен—> Добавить токен—> Проверить области—> Скопировать токен) Тестовое соединение—> Проверить, подключено ли оно к вашей учетной записи Github или нет. Установите флажок "Управлять перехватчиками". предыдущие учетные данные для "общего секрета"

Добавьте webhook, если не добавлен в ваш репозиторий

  1. Перейдите в настройки Github Repository → добавить webhook—> добавить URL
    Http://Public_IP: Jenkins_PORT/GitHub-webhook/
  2. Или, если у вас нет Public_IP, используйте ngrok. Установите, выполните аутентификацию, получите публичный IP-адрес с помощью команды. /ngrok http 80 (используйте свой jenkins_port), затем добавьте webhook → добавьте URL http://Ngrok_IP/github-webhook/
  3. Проверьте это, доставив полезную нагрузку со страницы webhook и проверьте, получите ли вы 200 статусов или нет.

Если у вас есть плагин Github Pull запросы, настройте его также с опубликованным URL-адресом Jenkins.

  1. Общий раздел. Установите флажок "Github project", добавьте URL проекта - (ссылка на github заканчивается на ".git/")
  2. Общий раздел. Установите флажок "Этот проект параметризован" и добавьте Name- SBRANCH По умолчанию Value- "refs/remotes/origin/dev"
  3. Установите флажок triggers.section.Check - "Триггер GitHub для опроса GITScm"
  4. Раздел конвейера: выберите - конвейерный скрипт из SCM → выберите git → URL-адрес addRepository → добавьте учетные данные git → выберите расширенный → добавить источник Name-, RefSpec- '+refs/heads/dev: refs/remotes/origin/dev '(dev - это ветка github) → ветки для сборки - $ {SBRANCH} (имя параметра из ссылки 1.st) → путь к сценарию—> Jenkinsfile—> снять флажок Lightweightcheckout
  5. Применить—> сохранить