Jenkins CI: как запускать сборки на SVN-фиксации

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

Ответ 1

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

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

  • Опросите репозиторий, чтобы узнать, произошли ли изменения. Это может "пропустить" фиксацию, если в течение одного и того же интервала опроса попадают два коммита. Описание того, как это сделать здесь, обратите внимание на четвертый скриншот, в котором вы настраиваете на задание "триггер сборки" на основе опроса репозитория (с конфигурацией, подобной crontab).

  • Настройте свой репозиторий на крючок после фиксации, который уведомляет Дженкинса о необходимости создания сборки. Описание того, как это сделать здесь, в разделе "Захваты после фиксации"

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

Ответ 2

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

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

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

Вы можете проверить мой script из github

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

Ответ 3

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

Ответ 4

Вам нужен только один плагин, который является плагином subversion. тогда Просто, перейдите в jenkins- > job_name- > Build Trigger section → (i) Запуск триггера удаленно (т.е. из скриптов)   Идентификатор аутентификации: -Token_name

Затем перейдите в каталог svn server hooks, затем после пожара под командами: - (a) cp post-commit.tmpl post-commit (b) chmod 777 post-commit (c) chown -R www-data: www-data post-commit (d) vi post-commit   Примечание: Все строки должны быть прокомментированы  добавить последнюю строку синтаксис (для пользователя linux): -/usr/bin/curl http://username:[email protected]:8081/job/job_name/build?token=Token_name

Синтаксис

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

Ответ 5

Вы можете использовать крюк post-commit.

Поместите крюк post-commit script в папку 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 script или нет.