Как настроить git post commit hook
как запустить сборку удаленно от Дженкинс?
Как настроить git post commit hook?
мое требование заключается в том, что всякий раз, когда изменения вносятся в репозиторий Git для конкретного проекта, он автоматически запускает сборку Jenkins для этого проекта.
в Jenkins триггер создать раздел I выбранного триггера построить удаленно.
В .git
КАТАЛОГ, КАТАЛОГ крючков есть в том, что мы должны настроить файл post commit.
Я путаю как запустите сборку оттуда (я знаю, что некоторые части мы должны использовать команду curl).
curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con
Я разместил эту команду в моем каталоге git server hooks (post commit hook).
Всякий раз, когда изменения происходят в репозитории, он запускает автоматическую сборку.
Я хочу проверить в наборе изменений, есть ли по крайней мере один файл java, который должен начать сборку.
Предположим, что разработчики изменили только файлы xml или файлы свойств, которые сборка не должна начать.
Вместе с xml
предположим .java
файлы там сборка должна начаться.
4 ответа:
как говорилось в "опрос должен умереть: запуск Дженкинса строится из крючка git", вы можете уведомить Дженкинса о новой фиксации:
последние плагин для Git 1.1.14 (который я только что выпустил), теперь вы можете сделать это более > легко, просто выполнив следующую команду:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
это будет сканировать все задания, настроенные для проверки указанного URL-адреса, и если они также настроены с опросом, это будет немедленно запустите опрос (и если это найдет изменение, стоящее сборки, Сборка будет запущена в свою очередь.)
это позволяет сценарию оставаться неизменным, когда задания приходят и уходят в Jenkins.
Или если у вас есть несколько репозиториев в одном хост-приложении репозитория (например, Gitosis), вы можете совместно использовать один сценарий крючка после получения со всеми репозиториями. Наконец, этот URL-адрес не требует аутентификации даже для защищенных Дженкинс, потому что сервер не делает непосредственно использовать все, что клиент отправляет. Он запускает опрос, чтобы проверить, что есть изменение, прежде чем он фактически начнет сборку.как упомянутые здесь, убедитесь, что вы выбрали правильный адрес для вашего сервера 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>.
The url параметр должен точно соответствовать тому, что у вас есть в хранилище URL-адресом о твоей работе Дженкинса.
При копировании примеров я опустил протокол, в нашем случаеssh://
, и это не сработало.
вы также можете использовать простой пост-получаем крюк, как в "толчок на основе строит с помощью Дженкинса и GIT"
#!/bin/bash /usr/bin/curl --user USERNAME:PASS -s \ http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
сконфигурируйте свою работу Дженкинса, чтобы иметь возможность "запускать сборки удаленно" и использовать маркер аутентификации (
1qaz2wsx
в этом примере).однако это сценарий для конкретного проекта, и автор упоминает способ его обобщения.
Первое решение проще, так как оно не зависит от аутентификации или конкретного проекта.
я хочу чтобы проверить изменение, установите, есть ли хотя бы один файл java, сборка должна начаться.
Предположим, что разработчики изменили только файлы XML или файлы свойств, тогда сборка не должна запускаться.в принципе, ваш скрипт сборки можно:
- поставить "построить" заметки (см.
git notes
) по первому звонку- при последующих вызовах захватите список коммитов между
HEAD
вашего филиала кандидата для сборки и фиксации ссылается наgit notes
'build' (git show refs/notes/build
):git diff --name-only SHA_build HEAD
.- ваш скрипт может проанализировать этот список и решить, нужно ли ему продолжать сборку.
- в любом случае, создать/переместить
git notes
'build
' toHEAD
.
май 2016:cwhsu указывает в комментариях следующий возможный url:
вы могли бы просто использовать
curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
если вы устанавливаете конфигурацию триггера в своем элемент
июня 2016 года polaretto указывает в комментариях:
я хотел добавить, что с помощью всего лишь небольшого количества сценариев оболочки вы можете избежать ручной настройки url, особенно если у вас есть много репозиториев в общем каталоге.
Например, я использовал эти расширения параметров, чтобы получить имя РЕПОrepository=${PWD%/hooks}; repository=${repository##*/}
и затем используйте его как:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository
надеюсь, это поможет:http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html
это просто вопрос, используя
curl
для запуска задания Дженкинса с помощью крючков git, предоставляемых git.
Командаcurl http://localhost:8080/job/someJob/build?delay=0sec
может запустить работу Дженкинса, где
someJob
- имя задания Jenkins.Поиск
hooks
папка в вашем скрытом .папка git. Переименовать доpost-commit
. Откройте его с помощью Блокнот, убери: Nothing
строка и вставьте в нее приведенную выше команду.вот и все. Всякий раз, когда вы делаете фиксацию, Git запускает команды post-commit, определенные в файле.
как предыдущий ответ показал пример того, как полный крюк может выглядеть вот код моего рабочего post-receive hook:
#!/usr/bin/python import sys from subprocess import call if __name__ == '__main__': for line in sys.stdin.xreadlines(): old, new, ref = line.strip().split(' ') if ref == 'refs/heads/master': print "==============================================" print "Pushing to master. Triggering jenkins. " print "==============================================" sys.stdout.flush() call(["curl", "-sS", "http://jenkinsserver/git/notifyCommit?url=ssh://user@gitserver/var/git/repo.git"])
в этом случае я запускаю задания jenkins только при нажатии на master, а не на другие ветви.
Я хочу добавить к ответам выше, что становится немного сложнее, если включена авторизация Дженкинса.
после его включения я получил сообщение об ошибке, что анонимный пользователь нуждается в разрешении на чтение.
Я видел два возможных решения:
1: изменение моего крючка на:
curl --user name:passwd -s http://domain?token=whatevertokenuhave
2: Настройка авторизации на основе проекта.
прежние решения имеют тот недостаток, что мне пришлось выставить свой passwd в файле hook. Неприемлемый в моем случае.
второй работает для меня. В глобальных настройках аутентификации я должен был включить общий>Чтение для анонимного пользователя. В проекте, который я хотел запустить, мне нужно было включить Job>Build и Job>Read for Anonymous.
Это еще не идеальное решение, потому что теперь вы можете увидеть проект в Jenkins без регистрации. Возможно, есть еще лучшее решение, используя прежний подход с HTTP-логином, но я не понял этого.