Translate

понеділок, 21 вересня 2015 р.

Start Jenkins task after push to Git/Gitlab

Часто монотонні кроки можна просто автоматизувати і не виконувати їх щоразу. Скажімо, після кожного коміту в репозиторій чи коміту з певним тегом можна запускати певну задачу чи виливати свіжий код проекту. Насправді, це не так складно, як може здаватись на перший погляд.

Розглянемо конкретний випадок: будемо автоматично запускати Jenkins задачу після кожного коміту в GitLab репозиторій. GitLab - це менеджмент-панель на базі Git і приведена лише як приклад.

Jenkins "із коробки" підтримує таку можливість, проте не від анонімного користувача. Тому скористаємось іншим рішенням - плагіном Build Token Root. Спочатку встановимо його: Manage Jenkins > Manage Plugins > Available > Build Authorization Token Root Plugin:


Як варіант, звісно, можна скористатись Gitlab Hook плагіном, проте він працює лише зі стандартним SCM Git і при бажанні змінити останній на, наприклад, Multiple SCMs Plugin Jenkins, буде втрачена можливість користуватись першим плагіном. Також я вбачаю використання плагіну Build Token Root більш безпечним.

Отже, налаштуємо Build Token Root Plugin. Для задачі, запуск котрої необхідно автоматизувати, обираємо пункт Configure, додаємо секцію Build Triggers, ставимо галочку Trigger builds remotely. Все як на наступному малюнку:



У якості ключа краще обирати щось достатньо довге, проте лише здоровий глузд забороняє зробити навпаки. Для швидкого генерування ключа можна скористуватись наприклад такою командою:

# date | md5sum

Зберігаємо зміни до задачі Jenkins та переходимо до налаштування GitLab. У необхідному репозиторію обираємо Project > Settings > Web Hooks та додаємо Push events тригер. Тут, до речі, важливо сформувати коректне посилання для запуску Jenkins задачі.


У разі якщо задача знаходиться у директорії Jenkins, останню також необхідно включати в повний шлях. Для мене, в свій час, це чомусь було не одразу очевидним. Token - це ключ, що був попереньо згенерований і вписаний до Jenkins-задачі.

Тобто у моєму випадку коректне посилання задля запуску Jenkins задачі таке:

https://jenkins.example.com/buildByToken/build?job=Configuration%20Delivery/&token=86e0f1vfvfvfv0ce8d5a70475015098bfdfgb

В списку Triggers, можна побачити всі можливі варіанти запуску веб-хука, і як наслідок причин запуску задачі на Jenkins.

Наразі, при кожному новому коміті у репозиторій GitLab, останній буде запускати веб-хук із указанням імені задачі та ключа в тілі URL, що, в свою чергу, як можна здогадатись зі скріншотів, буде запускати Configuration Delivery задачу Jenkins.

У випадку простого git-репозиторію цю лінку можна, наприклад, просто запускати curl-ом.

Build Token Root Plugin - універсальне рішення, проте є також більш специфічні речі:

https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin - Gitlab
https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Plugin - GitHub
https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Pushnotificationfromrepository - Git

Посилання:
https://iww.inria.fr/tech-zone/how-to-trigger-a-build-remotely/
http://doc.gitlab.com/ee/integration/jenkins.html

Немає коментарів:

Дописати коментар