Введение в Jenkins Pipelines

JenkinsBeginner
Практиковаться сейчас

Введение

Добро пожаловать на лабораторную работу по основам Jenkins Pipelines. Jenkins Pipeline — это мощная функция, позволяющая определить весь процесс сборки, тестирования и развертывания в виде кода. Это определение хранится в текстовом файле под названием Jenkinsfile, который обычно версионируется вместе с исходным кодом вашего приложения. Эта практика известна как "Pipeline-as-Code" (Конвейер как код).

В этой лабораторной работе вы сосредоточитесь на синтаксисе Declarative Pipeline, который предлагает структурированный и удобный способ создания конвейеров. К концу этой лабораторной работы вы сможете:

  • Создать новый проект Pipeline в веб-интерфейсе Jenkins.
  • Написать базовый Jenkinsfile с использованием синтаксиса Declarative.
  • Настроить проект для использования Jenkinsfile из локального Git-репозитория.
  • Запустить конвейер и просмотреть его вывод.
  • Организовать конвейер в несколько этапов (stages).
  • Использовать переменные окружения для управления конфигурацией.

Экземпляр Jenkins уже запущен для вас в контейнере. Начнем.

Создание проекта Pipeline в Jenkins

Вашим первым шагом будет создание нового проекта типа Pipeline в Jenkins. Этот тип проекта специально разработан для выполнения конвейеров (pipelines), определенных в файле Jenkinsfile.

  1. Откройте браузер Firefox из настольного интерфейса. Браузер автоматически откроется по адресу http://localhost:8080, поэтому вам не нужно вручную вводить URL. Вход в систему не требуется.
  2. На панели управления Jenkins (dashboard) нажмите New Item (Новый элемент) в меню слева.
  3. В поле Enter an item name (Введите имя элемента) введите my-first-pipeline.
  4. Выберите Pipeline из списка типов проектов.
  5. Нажмите кнопку OK внизу страницы.
Jenkins dashboard New Item button
  1. Вы перейдете на страницу конфигурации проекта. Пока мы оставим настройки как есть. Прокрутите вниз и нажмите Save (Сохранить).

Вы только что создали пустой проект Pipeline. На следующем шаге вы создадите Jenkinsfile и настроите этот проект для его использования.

Настройка SCM для использования удаленного репозитория

Теперь вы настроите ваш проект Jenkins для получения определения конвейера из удаленного Git-репозитория. Мы будем использовать демонстрационный репозиторий, который содержит предварительно настроенный Jenkinsfile и пример приложения.

Демонстрационный репозиторий находится по адресу: https://github.com/labex-labs/jenkins-demo

Давайте рассмотрим Jenkinsfile, который мы будем использовать из удаленного репозитория:

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        stage('Build') {
            steps {
                echo 'Building the application...'
                sh 'echo "Compiling source code..."'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing the application...'
                sh 'echo "Running unit tests..."'
            }
        }
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

Этот скрипт Declarative Pipeline включает несколько этапов (stages) и демонстрирует ключевые концепции:

  • pipeline { ... }: Основной блок, определяющий весь конвейер.
  • agent any: Указывает Jenkins запустить этот конвейер на любом доступном агенте.
  • environment { ... }: Определяет переменные окружения, которые могут использоваться на протяжении всего конвейера.
  • stages { ... }: Обертка для всех этапов конвейера.
  • stage('...') { ... }: Определяет конкретные этапы. Этапы помогают визуализировать рабочий процесс.
  • steps { ... }: Содержит фактические команды, которые будут выполнены на этапе.
  • echo '...': Шаг, который выводит сообщение в журнал сборки.
  • sh '...': Шаг, который выполняет команды оболочки (shell commands).

Теперь настройте ваш проект Jenkins для использования этого удаленного репозитория:

  1. Вернитесь в пользовательский интерфейс Jenkins в вашем браузере и перейдите на страницу проекта my-first-pipeline.
  2. Нажмите Configure (Настроить) в меню слева.
  3. Прокрутите вниз до раздела Pipeline (Конвейер).
  4. Измените выпадающий список Definition (Определение) с "Pipeline script" (Скрипт конвейера) на Pipeline script from SCM (Скрипт конвейера из SCM).
  5. В появившемся выпадающем списке SCM выберите Git.
  6. В поле Repository URL (URL репозитория) введите: https://github.com/labex-labs/jenkins-demo
  7. В поле Script Path (Путь к скрипту) введите: introduction-to-pipelines/Jenkinsfile
  8. Нажмите Save (Сохранить).
Конфигурация конвейера Jenkins для удаленного Git-репозитория

Ваш проект теперь настроен для выполнения конвейера, определенного в удаленном репозитории GitHub.

Запуск Pipeline и проверка вывода

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

  1. На странице проекта my-first-pipeline нажмите Build Now (Запустить сборку) в меню слева.

  2. Будет запланирована новая сборка, которая появится в панели Build History (История сборок) слева. Под историей, Stage View (Представление этапов) покажет, что этап "Build" (Сборка) выполняется, а затем станет зеленым после завершения.

    Представление этапов конвейера, показывающее ход сборки
  3. Чтобы увидеть подробный вывод, нажмите на номер сборки (например, #1) в истории сборок.

  4. На странице сводки сборки нажмите Console Output (Вывод консоли) в меню слева.

    Вывод консоли, показывающий успешное выполнение конвейера
  5. Прокрутите журнал. Вы найдете сообщения из шагов вашего конвейера, подтверждающие успешное выполнение конвейера.

...
[Pipeline] { (Build)
[Pipeline] echo
Building the application...
[Pipeline] sh
+ echo Compiling source code...
Compiling source code...
[Pipeline] } // stage
[Pipeline] { (Test)
[Pipeline] echo
Testing the application...
[Pipeline] sh
+ echo Running unit tests...
Running unit tests...
[Pipeline] } // stage
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS

Вы успешно запустили свой первый конвейер и проверили его вывод. Обратите внимание, как конвейер автоматически выполнил все три этапа (Build, Test, Deploy), которые были определены в Jenkinsfile удаленного репозитория.

Понимание нескольких этапов в Pipeline

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

Давайте рассмотрим, как структурирован конвейер с несколькими этапами:

stages {
    stage('Build') {
        steps {
            echo 'Building the application...'
            sh 'echo "Compiling source code..."'
        }
    }
    stage('Test') {
        steps {
            echo 'Testing the application...'
            sh 'echo "Running unit tests..."'
        }
    }
    stage('Deploy') {
        steps {
            echo "Deploying the application to ${env.DEPLOY_TARGET}..."
            sh 'echo "Application deployed successfully!"'
        }
    }
}
  1. Вернитесь в пользовательский интерфейс Jenkins для проекта my-first-pipeline и нажмите Build Now (Запустить сборку), чтобы снова запустить конвейер, если вы еще этого не сделали.

  2. Наблюдайте за Stage View (Представление этапов) на панели управления проектом. Вы увидите три столбца, представляющих ваши этапы "Build" (Сборка), "Test" (Тестирование) и "Deploy" (Развертывание). Jenkins визуализирует прогресс по мере продвижения сборки через каждый из них.

    Представление этапов Jenkins, показывающее этапы сборки, тестирования и развертывания
  3. Нажмите на любой этап в Stage View, чтобы увидеть подробные журналы для этого конкретного этапа.

  4. Обратите внимание, как каждый этап выполняется последовательно — Jenkins ждет успешного завершения одного этапа, прежде чем перейти к следующему.

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

Понимание переменных окружения в Pipeline

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

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

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

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    stages {
        // ... other stages ...
        stage('Deploy') {
            steps {
                echo "Deploying the application to ${env.DEPLOY_TARGET}..."
                sh 'echo "Application deployed successfully!"'
            }
        }
    }
}

Ключевые моменты относительно переменных окружения в Jenkins Pipelines:

  • Блок environment { ... } определяет переменные, которые доступны на протяжении всего конвейера.
  • Переменные доступны с использованием синтаксиса ${env.VARIABLE_NAME}.
  • Крайне важно использовать двойные кавычки (") для строк с интерполяцией переменных, поскольку интерполяция переменных в Groovy работает только внутри строк, заключенных в двойные кавычки.
  • Переменные окружения делают ваши конвейеры более гибкими и простыми в обслуживании.
  1. Если вы еще этого не сделали, запустите новую сборку в Jenkins, нажав Build Now (Запустить сборку).

  2. После завершения сборки проверьте Console Output (Вывод консоли) для сборки. В журнале для этапа "Deploy" (Развертывание) вы увидите, что переменная была правильно подставлена:

...
[Pipeline] { (Deploy)
[Pipeline] echo
Deploying the application to staging...
[Pipeline] sh
+ echo Application deployed successfully!
Application deployed successfully!
[Pipeline] } // stage
...
Finished: SUCCESS
  1. Обратите внимание, как значение переменной окружения DEPLOY_TARGET staging было автоматически подставлено в оператор echo.

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

Резюме

Поздравляем! Вы успешно завершили это введение в Jenkins Pipelines. Вы изучили основные концепции определения рабочего процесса CI/CD как кода.

В этой лабораторной работе вы практиковались в следующем:

  • Создание проекта Pipeline в пользовательском интерфейсе Jenkins.
  • Настройка проекта для использования Jenkinsfile из удаленного Git-репозитория (SCM).
  • Понимание структуры декларативного конвейера (Declarative Pipeline) с несколькими этапами.
  • Запуск конвейера и проверка его вывода в консоли.
  • Наблюдение за тем, как конвейеры структурируются в логические этапы для ясности и организации.
  • Понимание того, как определяются и используются переменные окружения для придания конвейерам большей динамичности.

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