Как упоминалось в разделе « Опрос должен умереть: запуск сборок Jenkins с помощью git-хука », вы можете уведомить Jenkins о новой фиксации:
С последним плагином Git 1.1.14 (который я только что выпустил) вы можете сделать это более> легко, просто выполнив следующую команду:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Это просканирует все задания, которые настроены для проверки указанного URL-адреса, и, если они также настроены с опросом, он немедленно вызовет опрос (и если это обнаружит изменение, достойное сборки, сборка будет запущена в свою очередь. )
Это позволяет сценарию оставаться неизменным, когда в Jenkins приходят и уходят задания.
Или, если у вас есть несколько репозиториев в рамках одного хост-приложения репозитория (например, Gitosis), вы можете использовать один скрипт перехвата post-receive для всех репозиториев. Наконец, этот URL-адрес не требует аутентификации даже для защищенного Jenkins, потому что сервер напрямую не использует ничего, что отправляет клиент. Он запускает опрос, чтобы убедиться, что есть изменение, до того, как фактически начнет сборку.
Как упоминалось здесь , убедитесь, что вы используете правильный адрес для своего сервера Jenkins:
поскольку мы запускаем Jenkins как автономный веб-сервер на порту 8080, URL-адрес должен быть без символа /jenkins
, например:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Чтобы усилить этот последний пункт, ptha добавляет в комментариях :
Это может быть очевидно, но у меня были проблемы с:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
Параметр url должен точно соответствовать тому, что у вас есть в URL-адресе репозитория вашего задания Jenkins.
При копировании примеров я пропустил протокол, в нашем случае ssh://
, и он не сработал.
Вы также можете использовать простой обработчик post-receive, как в « Сборках на основе push с использованием Jenkins и GIT »
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Настройте задание Jenkins, чтобы иметь возможность «запускать сборки удаленно» и использовать токен аутентификации ( 1qaz2wsx
в этом примере).
Однако это сценарий для конкретного проекта, и автор упоминает способ его обобщения.
Первое решение проще, поскольку оно не зависит от аутентификации или конкретного проекта.
Я хочу проверить в наборе изменений, есть ли хотя бы один файл java для запуска сборки.
Допустим, разработчики изменили только файлы XML или файлы свойств, тогда сборка не должна запускаться.
По сути, ваш сценарий сборки может:
- поместите заметки о сборке (см.
git notes
при первом звонке )
- при последующих вызовах возьмите список коммитов между
HEAD
кандидатом в ветку для сборки и фиксацией, на которую ссылается git notes
'build' ( git show refs/notes/build
):git diff --name-only SHA_build HEAD
.
- ваш скрипт может проанализировать этот список и решить, нужно ли продолжать сборку.
- в любом случае создайте / переместите свой
git notes
" build
" в HEAD
.
Май 2016: cwhsu указывает в комментариях на следующий возможный URL:
вы можете просто использовать, curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
если вы установите конфигурацию триггера в своем элементе
Июнь 2016, Поларетто отмечает в комментариях :
Я хотел добавить, что с помощью всего лишь небольшого количества сценариев оболочки вы можете избежать ручной настройки URL-адреса, особенно если у вас много репозиториев в общем каталоге.
Например, я использовал эти расширения параметров, чтобы получить имя репо
repository=${PWD%/hooks};
repository=${repository##*/}
а затем используйте его как:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository