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

Обновлено и опубликовано Опубликовано:

Используемые термины: JenkinsCI/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.

# Linux # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет