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

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

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

В данной инструкции представлена базовая информация по использованию pipeline в Jenkins. Мы рассмотрим процесс для чайников, начиная с установки плагина, создания задания и перейдем к разбивке процесса обработки кода на стадии.

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

При установке Jenkins система по умолчанию предлагает установить плагин pipeline. Вероятно, в нашей системе он есть. Но если плагин не установлен, переходим на стартовой странице веб-интерфейса Jenkins в раздел Настроить Jenkins:

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

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

В настройках Jenkins переходим к управлению плагинами

Переходим на вкладку Доступные и ищем нужный нам плагин по слову «pipeline». Мы получим большое количество результатов — нам нужен плагин с названием «Pipeline»:

Находим плагин pipeline и выбираем его для установки

Внизу экрана нажимаем Install without restart:

Кликаем по кнопке установки плагинов без перезагрузки Jenkins

Мы увидим полный список компонентов, которые нужно будет установить для плагина — дожидаемся окончания процесса (мы должны увидеть «Успешно» или «Success»):

Ждем, пока не установятся все компоненты

* в процессе установки плагина могут появиться сообщения об ошибках. Проблемы могут быть связаны с расхождением версий зависимых компонентов или необходимостью перезагрузки. Так или иначе, просматриваем такие сообщения и самостоятельно пытаемся в них разобраться.

После завершения установки, можно вернуться на главную страницу, кликнув по одноименной ссылке:

Возвращаемся на главную страницу Jenkins

Наша система готова для создания конвейера.

Создание и настойка задания

На главной странице Jenkins кликаем по Создать Item:

Переходим к созданию нового элемента в Jenkins

Даем название нашей задаче и ниже выбираем Pipeline:

Даем название элементу и выбираем тип Pipeline

Нажимаем кнопку OK:

Нажимаем OK для создания элемента в Jenkins

Прокручиваем страницу вниз до подраздела «Pipeline» — сюда мы пишем скрипт на Groovy:

Доходим до поля, куда пишем pipeline на Groovy

Также у нас есть возможность использовать репозиторий Git в качестве источника файла Jenkinsfile, выбрав в подразделе «Definition» Pipeline script from SCM и Git:

Возможность использовать Git для загрузки пайплайна

... но мы в данной инструкции будем рассматривать написание кода напрямую в Jenkins.

Для начала, напишем приветствие:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

Существует 2 способа написания pipeline — скриптовый и декларативный. В нашем примере используется последний. Благодаря строгому синтаксису, он проще читается — в декларативном пайплайне обязательно должны быть:

  1. Директива pipeline. В нее мы оборачиваем наш код.
  2. Определение агента. В нашем примере пока не задан конкретный (agent any), но ниже мы рассмотрим запуск конвейера в docker.
  3. Необходима директива stages, в которой, в свою очередь, определены стадии (stage).
  4. Обязательно указываем steps, в котором и будет наш код.

А также:

  • Экранирование некоторых символов можно сделать с помощью обратного слеша — \
  • Блок текста, например для его написания в несколько строк, можно обернуть в три одинарные кавычки — '''
  • Оставить комментарий на одну строку можно двумя прямыми слешами — //
  • Блок комментария делаем так — /* комментарий */

И нажимаем Сохранить:

Сохраняем первый pipeline

* наш скрипт на Groovy будет сохранен в так называемый Jenkinsfile — это файл, в котором мы описываем этапы выполнения нашего задания с использованием pipeline.

Нас перекинет на страницу задания — слева кликаем по Собрать сейчас:

Делаем первый запуск нашего Pipeline

Конвейер немного поработает и выдаст результат, состоящий из одного шага:

Наше задание с приветствием успешно завершено

Созданное задание работает — попробуем его усложнить.

Разбиваем обработку на этапы

Открываем на редактирование наше задание:

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

Перемещаемся вниз и пишем следующий код на Groovy:

pipeline {
    agent any

    stages {
        stage('Сборка') {
            steps {
                echo 'Выполняем команды для сборки'
            }
        }
        stage('Тестирование') {
            steps {
                echo 'Тестируем нашу сборку'
            }
        }
        stage('Развертывание') {
            steps {
                echo 'Переносим код в рабочую среду или создаем артефакт'
            }
        }
    }
}

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

Сохраняем изменения и запускаем задачу на выполнение:

Выполняем задачу, разделенную на этапы

После ее завершения мы должны увидеть что-то на подобие:

Первый результат выполнения задания, разделенного на 3 этапа

Попробуем посмотреть чуть подробнее протокол выполнения — кликаем по изображению стрелки справа от названия задания и выбираем Последняя стабильная сборка (или просто Последняя сборка):

Переходим к последней сборке

Кликаем по Console Output:

Переходим в подробному выводу данных во время сбоки кода

Мы должны увидеть вывод всех комментарий и команд, которые выполнялись во время сборки.

Обработка в Docker

Jenkins может выполнять задание внутри Docker. Таким образом, мы можем использовать контейнеры с настроенной средой, необходимой для тестирования и сборки кода и получения необходимых артефактов.

Рассмотрим настройку сервера для возможности использовать Docker и пример кода на Groovy.

Подготовка системы

Мы должны выполнит ряд действий:

  • Установку плагина для работы Jenkins с Docker.
  • Установку сервиса Docker в системе.
  • Настройку привилегий.

1. Начнем с установки плагина. На главной странице Jenkins переходим в настройки:

Переходим к настройкам для установки плагина docker

Кликаем по разделу Управление плагинами:

Заходим в раздел управления плагинами

Среди списка плагинов находим «Docker Pipeline» и отмечаем его для установки:

Отмечаем для установки плагин по работе с docker из pipeline

Переходим к установке:

Выполняем установку плагина Docker Pipeline

... и доживаемся ее окончания.

2. Подключаемся к консоли по SSH и выполняем Установку Docker.

3. Чтобы можно было подключиться к Docker из Jenkins, необходимо, чтобы пользователь jenkins входил в группу docker — для этого выполняем команду:

usermod -a -G docker jenkins

После необходимо перезапустить дженкинс:

systemctl restart jenkins

Среда готова для работы с контейнерами.

Использование агента docker

Переходим к настройке нашего задания или создаем новое и приводим Groovy-код к такому виду:

pipeline {
    agent { docker { image 'python:latest' } }

    stages {
        stage('Подготовка') {
            steps {
                sh "python --version"
            }
        }
        stage('Сборка') {
            steps {
                echo 'Выполняем команды для сборки'
            }
        }
        stage('Тестирование') {
            steps {
                echo 'Тестируем нашу сборку'
            }
        }
        stage('Развертывание') {
            steps {
                echo 'Переносим код в рабочую среду или создаем артефакт'
            }
        }
    }
}

* обратите внимание, мы изменили агента на docker с указанием образа, в котором будет выполняться обработка — в данном примере, с помощью python (последней версии). Также мы добавили этап Подготовка, в котором просто выведем на экран версию python.

Первый запуск будет выполняться долго, так как необходимо будет загрузить образ. В конечном итоге, мы должны получить, примерно, следующую картину:

Результат работы Groovy с использованием образа docker с python

Для подробного просмотра хода процесса (или решения проблем в случае их возникновения), кликаем по стрелке справа от названия задания и переходим к сборке:

Переходим к последней сборке для нашего задания

Переходим к консоли:

Кликаем по Console Output для перехода к подробному логу выполнения

Если задание выполнено успешно, среди логов мы должны увидеть версию используемого в контейнере Docker python:

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

Некоторые инструкции, которые могут оказаться полезными:

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

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

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

Да            Нет