2012-04-04 1 views
64

Какие плагины и функции плагина необходимо настроить, чтобы заставить мое задание Jenkins запускать код сборки в любое время, привязан к проекту SVN? Я установил как стандартный SVN-плагин, так и плагин тегов SVN, но не вижу никаких новых функций, которые позволяют настроить триггер.Jenkins CI: Как запускать сборки на SVN commit

+0

возможно дубликат [Trigger Хадсон сборки, когда СВН фиксации] (HTTP : //stackoverflow.com/questions/4792466/trigger-hudson-build-when-svn-commit) – highlycaffeinated

ответ

71

Есть два способа сделать это:

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

  1. Опрос репозитория, чтобы узнать, произошли ли изменения. Это может «пропустить» фиксацию, если в течение одного и того же интервала опроса попадают два коммита. Description of how to do so here, обратите внимание на четвертый снимок экрана, где вы настраиваете на задание «триггер сборки» на основе опроса репозитория (с конфигурацией, подобной crontab).

  2. Настройте свой репозиторий на наличие крюка после фиксации, который уведомляет Дженкинса о необходимости создания сборки. Description of how to do so here, в разделе «после совершения крючков»

Функция Tag SVN не является частью опроса, она является частью продвижения текущей «головы» из исходного кода в тег, чтобы сделать снимок строить. Это позволяет вам ссылаться на Jenkins buid # 32 как тег/теги SVN/build-32 (или что-то подобное).

+0

post-commit hooks rock. Более быстрое время отклика и (по шкале) ваша система CI не подавляет исходное репо с сотнями запросов журнала изменений. – EricMinick

+4

@ EricMinick Они великолепны, но иногда они могут растопить CI-сервер, если за короткий промежуток времени вы получите много мелких коммитов. Это все лошади для курсов, и трудно понять, какой метод является выгодным, не анализируя, как работает ваш процесс dev. –

+0

@EdwinBuck: Вы знаете, есть ли способ настроить Jenkins для создания только выборочных коммитов? Я объясню, у меня есть tortoiseSVN и проект Jenkins, который продолжает опрос репозитория. Теперь, если я хочу, чтобы совершение, которое я делаю, не должно запускать Дженкинса, есть ли способ сделать это? –

0

Я создал инструмент с использованием python с некоторым bash для запуска сборки jenkins. В основном вы должны собрать эти два значения из после фиксации при фиксации ударил SVN сервера:

REPOS = "$ 1" REV = "$ 2"

Затем вы используете «svnlook каталоги-изменил $ 1 -r $ 2 «чтобы получить путь, который только что совершил. Затем вы можете проверить, какой репозиторий вы хотите построить. Представьте, что у вас есть сто тысяч проектов. Вы не можете проверить весь репозиторий правильно?

Вы можете проверить мой сценарий из github

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

-1

Вы можете использовать крюк после фиксации.

Поместите скрипт post-commit hook в папку hooks, создайте wget_folder на своем диске C: \ и поместите файл wget.exe в эту папку. Добавьте следующий код в файл с именем post-commit.bat

SET REPOS=%1 
SET REV=%2 

FOR /f "tokens=*" %%a IN ( 
'svnlook uuid %REPOS%' 
) DO ( 
SET UUID=%%a 
) 

FOR /f "tokens=*" %%b IN ( 
'svnlook changed --revision %REV% %REPOS%' 
) DO ( 
SET POST=%%b 
) 

echo %REPOS% ----- 1>&2 

echo %REV% -- 1>&2 

echo %UUID% --1>&2 

echo %POST% --1>&2 

C:\wget_folder\wget^ 
    --header="Content-Type:text/plain"^ 
    --post-data="%POST%"^ 
    --output-document="-"^ 
    --timeout=2^ 
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%  

где Test = имя задания

echo используется, чтобы увидеть значение, и вы можете также добавить exit 2 в конце, чтобы знать о проблеме и независимо от того, запущен ли сценарий крюка post-commit.

0

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

0

Для этого необходим только один плагин, который является плагином subversion. затем Просто пойдите в jenkins-> job_name-> Построить Trigger раздел -> (I) Trigger построить удаленно (т.е. из скриптов) маркера аутентификации: -Token_name

Затем перейдите в каталог крюков SVN сервера, то после пожара ниже команд: - (a) cp post-commit.tmpl post-commit (b) chmod 777 post-commit (c) chown -R www-data: www-data post-commit (d) фиксация примечание: Все строки следует прокомментировать добавить ниже строки последние synta х (для пользователей Linux): -/USR/бен/локон http://username:[email protected]:8081/job/job_name/build?token=Token_name

синтаксиса (для пользователей Windows): - C:/curl_for_win/локон http://username:[email protected]:8081/job/job_name/build?token=Token_name

Смежные вопросы