Дженкінс С.І .: Як запускати збірки на коміті SVN


79

Які плагіни та функції плагінів мені потрібно встановити, щоб моє завдання Дженкінса ініціювало збірку, коли будь-який часовий код, призначений для проекту SVN?

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


1
можливий дублікат побудови тригера hudson, коли фіксується svn
сильно кофеїн

Відповіді:


86

Є два шляхи зробити це:

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

  1. Опитуйте сховище, щоб побачити, чи відбулися зміни. Це може "пропустити" коміт, якщо два коміти надходять протягом одного інтервалу опитування. Опис того, як це зробити тут , зверніть увагу на четвертий знімок екрана, де ви налаштовуєте на роботі "тригер побудови" на основі опитування сховища (із конфігурацією, подібною до crontab).

  2. Налаштуйте свій репозиторій на гачок після фіксації, який сповіщає Дженкінса про необхідність запуску збірки. Опис того, як це зробити, тут , у розділі "гачки після фіксації"

Функція тегу SVN не є частиною опитування, вона є частиною просування поточної "голови" вихідного коду до тегу, щоб зробити знімок збірки. Це дозволяє вам посилатися на buids # 32 Дженкінса як SVN тег / теги / build-32 (або щось подібне).


гачки після фіксації рок. Швидший час відгуку та (у масштабі) ваша система CI не подрібнює джерело репо із сотнями запитів журналу змін.
EricMinick,

5
@EricMinick Вони чудові, але іноді вони можуть розтопити сервер CI, якщо за короткий проміжок часу ви отримаєте багато невеликих комітів. Це всі коні для курсів, і важко зрозуміти, який метод є вигідним, не проаналізувавши, як зараз працює ваш розробник.
Едвін Бак,

1
@EdwinBuck: Чи знаєте ви, чи є спосіб налаштувати Дженкінса на створення лише вибіркових комітів? Поясню, у мене є tortoiseSVN і проект Дженкінса, який постійно опитує сховище. Тепер, якщо я хочу, щоб зроблене мною зобов'язання не викликало Дженкінса, чи є спосіб це зробити?
SandBag_1996

@UnderDog Якщо ви дозріли до того моменту, коли у вас є тригер після фіксації в maven, то я віддаю перевагу рішенню, яке шукає спеціальні "ключові слова" в тригері після фіксації, і виявляючи їх, вирішує НЕ говорити Дженкінсу сервер для запуску нової збірки. Наприклад, "^ DONTBUILD -. *" Може використовуватися як прапор "не будувати", якщо вказано в першому рядку коміту.
Едвін Бак,

@mxdsp Оновлено посилання. Він не такий гарний, як старий wandisco, але роботу буде виконано. Дякую!
Едвін Бак,

2

Вам потрібен лише один плагін, який є плагіном Subversion.

Потім просто перейдіть до Дженкінса → ім'я_назви → Створення тригера розділ → (i) Віддалена побудова тригера (тобто зі сценаріїв) Маркер аутентифікації:

Перейдіть до каталогу хуків SVN-сервера, а потім після запуску подайте наведені нижче команди:

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    Примітка: Усі рядки слід коментувати. Нарешті додайте рядок нижче

Синтаксис (для користувачів Linux):

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Синтаксис (для користувача Windows):

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Ця відповідь більш-менш ідентична цій відповіді .
Пітер Мортенсен,

1

Я створив інструмент за допомогою Python з деяким bash для запуску збірки Jenkins. В основному вам потрібно зібрати ці два значення з після фіксації, коли коміт потрапляє на сервер SVN:

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

Потім ви використовуєте "svnlook dirs-змінено $ 1 -r $ 2", щоб отримати шлях, який щойно здійснено. Тоді ви можете перевірити, яке сховище ви хочете побудувати. Уявіть, у вас є сотні тисяч проектів. Ви не можете перевірити ціле сховище, так?

Ви можете перевірити мій сценарій на GitHub .


-1

Ви можете використовувати гачок після фіксації.

Помістіть сценарій підключення після фіксації в 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%    

де Тест = назва роботи

echoвикористовується для перегляду значення, а ви також можете додати його exit 2в кінці, щоб дізнатись про проблему та про те, чи запущений скрипт підключення після фіксації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.