Thank you for reading this post, don't forget to subscribe!
Установка плагина
При установке Jenkins система по умолчанию предлагает установить плагин pipeline. Вероятно, в нашей системе он есть. Но если плагин не установлен, переходим на стартовой странице веб-интерфейса Jenkins в раздел Настроить Jenkins:
Кликаем по Управление плагинами:
Переходим на вкладку Доступные и ищем нужный нам плагин по слову «pipeline». Мы получим большое количество результатов — нам нужен плагин с названием «Pipeline»:
Внизу экрана нажимаем Install without restart:
Мы увидим полный список компонентов, которые нужно будет установить для плагина — дожидаемся окончания процесса (мы должны увидеть «Успешно» или «Success»):
* в процессе установки плагина могут появиться сообщения об ошибках. Проблемы могут быть связаны с расхождением версий зависимых компонентов или необходимостью перезагрузки. Так или иначе, просматриваем такие сообщения и самостоятельно пытаемся в них разобраться.
После завершения установки, можно вернуться на главную страницу, кликнув по одноименной ссылке:
Наша система готова для создания конвейера.
Создание и настойка задания
На главной странице Jenkins кликаем по Создать Item:
Даем название нашей задаче и ниже выбираем Pipeline:
Нажимаем кнопку OK:
Прокручиваем страницу вниз до подраздела «Pipeline» — сюда мы пишем скрипт на Groovy:
Также у нас есть возможность использовать репозиторий Git в качестве источника файла Jenkinsfile, выбрав в подразделе «Definition» Pipeline script from SCM и Git:
… но мы в данной инструкции будем рассматривать написание кода напрямую в Jenkins.
Для начала, напишем приветствие:
1 2 3 4 5 6 7 8 9 10 11 |
pipeline { agent any stages { stage('Hello') { steps { echo 'Hello World' } } } } |
Существует 2 способа написания pipeline — скриптовый и декларативный. В нашем примере используется последний. Благодаря строгому синтаксису, он проще читается — в декларативном пайплайне обязательно должны быть:
- Директива pipeline. В нее мы оборачиваем наш код.
- Определение агента. В нашем примере пока не задан конкретный (agent any), но ниже мы рассмотрим запуск конвейера в docker.
- Необходима директива stages, в которой, в свою очередь, определены стадии (stage).
- Обязательно указываем steps, в котором и будет наш код.
А также:
- Экранирование некоторых символов можно сделать с помощью обратного слеша — \
- Блок текста, например для его написания в несколько строк, можно обернуть в три одинарные кавычки — '''
- Оставить комментарий на одну строку можно двумя прямыми слешами — //
- Блок комментария делаем так — /* комментарий */
И нажимаем Сохранить:
* наш скрипт на Groovy будет сохранен в так называемый Jenkinsfile — это файл, в котором мы описываем этапы выполнения нашего задания с использованием pipeline.
Нас перекинет на страницу задания — слева кликаем по Собрать сейчас:
Конвейер немного поработает и выдаст результат, состоящий из одного шага:
Созданное задание работает — попробуем его усложнить.
Разбиваем обработку на этапы
Открываем на редактирование наше задание:
Перемещаемся вниз и пишем следующий код на Groovy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
pipeline { agent any stages { stage('Сборка') { steps { echo 'Выполняем команды для сборки' } } stage('Тестирование') { steps { echo 'Тестируем нашу сборку' } } stage('Развертывание') { steps { echo 'Переносим код в рабочую среду или создаем артефакт' } } } } |
* в данном примере мы выполняем задание в три этапа — сборка, тестирование и развертывания. В рамках нашей инструкции мы не будем выполнять ничего конкретного, поэтому просто выводим на экран текстовую информацию.
Сохраняем изменения и запускаем задачу на выполнение:
После ее завершения мы должны увидеть что-то на подобие:
Попробуем посмотреть чуть подробнее протокол выполнения — кликаем по изображению стрелки справа от названия задания и выбираем Последняя стабильная сборка (или просто Последняя сборка):
Кликаем по Console Output:
Мы должны увидеть вывод всех комментарий и команд, которые выполнялись во время сборки.
Обработка в Docker
Jenkins может выполнять задание внутри Docker. Таким образом, мы можем использовать контейнеры с настроенной средой, необходимой для тестирования и сборки кода и получения необходимых артефактов.
Рассмотрим настройку сервера для возможности использовать Docker и пример кода на Groovy.
Подготовка системы
Мы должны выполнит ряд действий:
- Установку плагина для работы Jenkins с Docker.
- Установку сервиса Docker в системе.
- Настройку привилегий.
1. Начнем с установки плагина. На главной странице Jenkins переходим в настройки:
Кликаем по разделу Управление плагинами:
Среди списка плагинов находим «Docker Pipeline» и отмечаем его для установки:
Переходим к установке:
… и доживаемся ее окончания.
2. Подключаемся к консоли по SSH и выполняем Установку Docker.
3. Чтобы можно было подключиться к Docker из Jenkins, необходимо, чтобы пользователь jenkins входил в группу docker — для этого выполняем команду:
usermod -a -G docker jenkins
После необходимо перезапустить дженкинс:
systemctl restart jenkins
Среда готова для работы с контейнерами.
Использование агента docker
Переходим к настройке нашего задания или создаем новое и приводим Groovy-код к такому виду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
pipeline { agent { docker { image 'python:latest' } } stages { stage('Подготовка') { steps { sh "python --version" } } stage('Сборка') { steps { echo 'Выполняем команды для сборки' } } stage('Тестирование') { steps { echo 'Тестируем нашу сборку' } } stage('Развертывание') { steps { echo 'Переносим код в рабочую среду или создаем артефакт' } } } } |
* обратите внимание, мы изменили агента на docker с указанием образа, в котором будет выполняться обработка — в данном примере, с помощью python (последней версии). Также мы добавили этап Подготовка, в котором просто выведем на экран версию python.
Первый запуск будет выполняться долго, так как необходимо будет загрузить образ. В конечном итоге, мы должны получить, примерно, следующую картину:
Для подробного просмотра хода процесса (или решения проблем в случае их возникновения), кликаем по стрелке справа от названия задания и переходим к сборке:
Переходим к консоли:
Если задание выполнено успешно, среди логов мы должны увидеть версию используемого в контейнере Docker python: