Запуск CI/CD Pipelines в Jenkins при коммите в SVN

Используемые термины: Jenkins, CI/CD.
В данной инструкции мы рассмотрим настройку Jenkins и Subversion (SVN) для автоматического запуска процесса CI/CD при отправке коммита. Предполагается, что у нас уже установлены и Jenkins и SVN — соответствующие инструкции будут приведены в конце данного руководства.
Информацию разобьем на следующие разделы:
Подготовка к настройке
Необходимо заранее:
- Установить плагины SVN и Build Authorization Token Root на сервер Jenkins.
- Создать отдельную учетную запись для доступа к репозиторию SVN от Jenkins.
Рассмотрим эти процессы по отдельности.
Установка плагинов
В веб-интерфейсе Jenkins переходим в разделы Настроить Jenkins:
Управление плагинами:
На вкладке Доступные вводим название subversion и выбираем его для установки:
После вводим название Build Authorization Token Root, и также выбираем его для установки:
Внизу кликаем по Download now and install after restart:
Ждем окончания загрузки плагина. После ставим флажок Перезапустить Jenkins по окончанию установки и отсутствии активных задач или в удобное время, перезагружаем дженкинс:
systemctl restart jenkins
Создание учетной записи
На сервере SVN вводим:
htpasswd -m /etc/apache2/dav_svn.passwd jenkins
* данная команда создаст пользователя jenkins в файле /etc/apache2/dav_svn.passwd. В вашем случае путь до файла может быть другим.
После вводим дважды пароль:
New password:
Re-type new password:
Adding password for user jenkins
Настройка Jenkins
Переходим по ссылке Создать Item:
Вводим название для объекта и выбираем Создать задачу со свободной конфигурацией:
* мы дали название svn-integration.
Кликаем ОК.
На следующем шаге в подразделе Управление исходным кодом выбираем Subversion. В раскрывшейся форме вводим:
- Repository URL — путь до нашего проекта в репозитории SVN.
- Credentials — логин и пароль для подключения к репозиторию, который мы создали предварительно.
Остальные опции можно не трогать:
* в нашем примере предполагается, что исходники Jenkins будет забирать по адресу http://192.168.0.20/svn/repo1/. Также мы выбрали для аутентификации учетную запись jenkins (при первой конфигурации ее не будет — добавляем, кликнув по Add).
Теперь переходим к разделу Триггеры сборки и ставим галочку для Trigger builds remotely (e.g., from scripts). После придумываем в вводим токен:
При желании сгенерировать токен, можно в Linux ввести команду:
date +%s | sha256sum | base64 | head -c 32 ; echo
В подразделе Build Steps можно выбрать выполнение команды shell и ввести любую команду (например, ls -l):
* в рамках данной инструкции у нас нет задачи собрать реальное приложение. Главное — настроить интеграцию репозитория Subversion и Jenkins.
Нажимаем Сохранить.
Попробуем проверить работоспособность нашего задания. Слева в меню кликаем по Собрать сейчас:
Немного ждем. Если все хорошо, мы увидим, примерно, такой вывод:
Задание выполнено успешно. Попробуем кликнуть на него и перейти в раздел Вывод консоли:
Мы должны увидеть содержимое нашего репозитория:
* в моем примере в репозитории был всего один файл test.txt.
Настройка SVN
Давайте для начала протестируем дистанционный запуск задания. На сервере SVN введем такую команду:
curl http://192.168.0.15:8080/buildByToken/build?job=svn-integration\&token=OTZiZThiMWM0NGQ2NzlkZjdkMTFjNGM1
* в данном примере предполагается, что сервер с jenkins работает по адресу http://192.168.0.15:8080. В опции job мы передаем название нашего проекта (svn-integration), а OTZiZThiMWM0NGQ2NzlkZjdkMTFjNGM1 — токен, который мы придумали при настройке задания.
На сервере Jenkins в списке заданий мы должны увидеть еще одну сборку:
Теперь на сервере Subversion перейдем в каталог с нашим проектом, который мы интегрируем с Jenkins:
cd /var/lib/svn/repo1
* в моем примере он расположен в директории /var/lib/svn/repo1.
Создадим в каталоге hooks файл post-commit:
vi hooks/post-commit
#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
curl http://192.168.0.15:8080/buildByToken/build?job=svn-integration\&token=OTZiZThiMWM0NGQ2NzlkZjdkMTFjNGM1
* скрипт post-commit позволяет выполнить необходимые команды после того, как мы выполнили коммит в репозиторий. В нашем примере мы выполняем запуск задания svn-integration, отправляя запрос в Jenkins.
Созданный файл должен иметь права на выполнение — выполним команду:
chmod +x hooks/post-commit
Готово. Попробуем выполнить коммит в наш проект. После переходим в веб-интерфейс Jenkins на страницу задания. Мы должны увидеть еще одну сборку (третью по счету):
Наша задача по интеграции выполнена.
Читайте также
Данные инструкции также могут быть полезными:
1. Установка Jenkins на CentOS.
2. Установка Jenkins на Ubuntu.
3. Использование pipeline в Jenkins.
4. Установка и настройка сервера SVN (Subversion) на Linux Ubuntu.