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

Используемые термины: Jenkins , CI/CD .

В данной инструкции мы рассмотрим настройку Jenkins и Subversion (SVN) для автоматического запуска процесса CI/CD при отправке коммита. Предполагается, что у нас уже установлены и Jenkins и SVN — соответствующие инструкции будут приведены в конце данного руководства.

Информацию разобьем на следующие разделы:

Подготовка к настройке

Необходимо заранее:

  1. Установить плагины SVN и Build Authorization Token Root на сервер Jenkins.
  2. Создать отдельную учетную запись для доступа к репозиторию SVN от Jenkins.

Рассмотрим эти процессы по отдельности.

Установка плагинов

В веб-интерфейсе Jenkins переходим в разделы Настроить Jenkins :

Переходим к настройкам Jenkins

Управление плагинами :

Переходим к управлению плагинами в Jenkins

На вкладке Доступные вводим название subversion и выбираем его для установки:

Выбираем плагин subversion для установки

После вводим название Build Authorization Token Root , и также выбираем его для установки:

Выбираем плагин 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 :

Создаем новый объект в Jenkins

Вводим название для объекта и выбираем Создать задачу со свободной конфигурацией :

Создаем новую задачу в Jenkins

* мы дали название 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.

Нажимаем Сохранить .

Попробуем проверить работоспособность нашего задания. Слева в меню кликаем по Собрать сейчас :

Пробуем запустить нашу задачу в дженкинс

Немного ждем. Если все хорошо, мы увидим, примерно, такой вывод:

Положительный статус выполнения нашего задания

Задание выполнено успешно. Попробуем кликнуть на него и перейти в раздел Вывод консоли :

Переходим к выводу консоли для задания в 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 в списке заданий мы должны увидеть еще одну сборку:

Список наших заданий в 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 на страницу задания. Мы должны увидеть еще одну сборку (третью по счету):

Выполнена сборка после коммита в SVN

Наша задача по интеграции выполнена.

Читайте также

Данные инструкции также могут быть полезными:

1. Установка Jenkins на CentOS .

2. Установка Jenkins на Ubuntu .

3. Использование pipeline в Jenkins .

4. Установка и настройка сервера SVN (Subversion) на Linux Ubuntu .

EnglishRussianUkrainian