Continuous Delivery — это процесс доставки новых функций, обновлений, исправлений ошибок на сервера максимально быстро и безопасно, с минимальным количеством ручного труда. В данной статье будет рассмотрен пример настройки continuous delivery с помощью Jenkins.

Обычно, разработчики не задумываются о CI на начальных этапах разработки, т.к. процесс выкладки достаточно примитивен, команда разработки не большая и релизы происходят не часто. С ростом проекта увеличивается количество используемых инструментов, растет число серверов, на которых работает приложение, и требуется выполнить намного больше шагов вручную, чтобы выложить новые обновления на продакшен. Это также увеличивает потенциальное число ошибок, которое может допустить разработчик.

В этом случае на помощь приходят системы Continuous Delivery,  в которых достаточно однажды настроить процесс выкладки, и затем можно запускать его сколько угодно, что экономит время разработчиков на собственно разработку, и исключает человеческие ошибки в процессе выкладки.

В этой статье будет рассмотрен простейший пример настройки Continuous Delivery с помощью Jenkins — одного из наиболее популярных сервисов для автоматизированной сборки и выкладки проектов.

Установка сервера Jenkins

Для установки Jenkins в Ubuntu потребуется выполнить следующие команды в консоли:

  1. Добавьте ключ jenkins в систему:
    wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
  2. Добавьте следующую строку в ваш /etc/apt/sources.list:
    deb https://pkg.jenkins.io/debian-stable binary/
  3. Обновите список пакетов и установите Jenkins:
    sudo apt-get update
    sudo apt-get install jenkins

Если вы пользуетесь другой операционной системой, то вы можете найти инструкцию по установке на официальном сайте Jenkins: https://jenkins.io/download/.

После этого Jenkins будет доступен по адресу: http://localhost:8080. Далее нужно указать пароль, расположенный в указанном файле:

Установка Jenkins - ввод пароля

Далее будет предложено установить рекомендуемые плагины. Рекомендую установить их, т.к. многие из них действительно полезны, и у вас появится какое-то представление о возможностях, предоставляемых Jenkins.

И на последнем шаге вам нужно создать пользователя для авторизации в Jenkins:

Установка Jenkins - создание нового пользователя

Поздравляю! Вы только что установили Jenkins и можете начать автоматизировать сборку и доставку вашего кода на сервера!

Создание тестового проекта

Создадим новый проект с типом Pipline. Данный тип проекта позволяет разбирать процесс сборки и выкладки на сервера на отдельные этапы, которые можно при необходимости запускать даже параллельно. Это позволяет очень наглядно отобразить процесс сборки, время выполнения на каждом этапе и так далее.

Установка Jenkins - Создание нового проекта

Условимся, что наш код лежит в git-репозитории. Скрипт выкладки будет скачивать код, запускать unit-тесты, чтобы убедится, что наш релиз не ломает существующий код, подключаться на сервер по ssh и обновлять код на сервере.

Для описания этапов сборки используется специальный язык pipline script. Под полем ввода самого скрипта есть ссылка Pipeline Syntax, открыв которую вы увидите все операции доступные в pipline script, а так же удобный генератор, позволяющий создать необходимые операции с помощью форм. Ниже приведен пример такого скрипта, который выполняет функции, описанные в предыдущем параграфе:

node {
    stage ('Prepare environment') {
        git branch: 'master', url: 'https://github.com/RusinovIG/unirest-php.git'
        sh 'composer install --dev'
    }
    stage ('Code analyse') {
        sh 'echo “TODO: Run some lints”'
    }
    stage ('Unit tests') {
        sh 'vendor/bin/phpunit'
    }
    stage ('Deploy') {
        sh 'ssh test@server "cd ~/jenkins/test/ && git pull && composer install"'
    }
}

Настройка выкладки вашего приложения завершена! Теперь на странице созданного pipline нужно запустить первую сборку, нажав на кнопку Build / Собрать сейчас (в зависимости от языковых настроек Jenkins). После успешного выполнения выкладки вы увидите время выполнения каждого этапа:

Установка Jenkins - статистика сборки

Вы только что собрали и выкатили код своего проекта на сервер в один клик. Далее можно настроить интеграцию с git, чтобы запускать выкладку кода при каждом новом коммите в ветку master. Таким образом выкладка кода будет полностью автоматизирована.

Поделитесь в комментариях, какими инструментами для Continuous Delivery пользуетесь вы?

Оставьте комментарий

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.