Введение в Jenkins Pipelines

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

Введение

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

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

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

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

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

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

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

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

  1. Вы перейдете на страницу конфигурации проекта. Пока оставьте настройки без изменений. Прокрутите страницу вниз и нажмите Save (Сохранить).

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

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

Теперь вы настроите проект Jenkins на получение описания пайплайна из локального Git-репозитория, который работает внутри контейнера Jenkins. Это делает лабораторную работу независимой от внешних сетей, при этом сохраняя рабочий процесс Pipeline script from SCM.

Демонстрационный репозиторий находится по адресу: git://localhost/pipeline-demo.git

Давайте изучим Jenkinsfile, который Jenkins загрузит из этого репозитория:

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!"'
            }
        }
    }
}

Этот скрипт декларативного пайплайна включает несколько этапов и демонстрирует ключевые концепции:

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

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

  1. Вернитесь в интерфейс Jenkins в браузере и перейдите на страницу проекта my-first-pipeline.
  2. Нажмите Configure в меню слева.
  3. Прокрутите вниз до раздела Pipeline.
  4. Измените выпадающий список Definition с "Pipeline script" на Pipeline script from SCM.
  5. В появившемся выпадающем списке SCM выберите Git.
  6. В поле Repository URL введите: git://localhost/pipeline-demo.git
  7. В поле Script Path введите: Jenkinsfile
  8. Нажмите Save.

Настройка SCM для Pipeline

Теперь ваш проект настроен на выполнение пайплайна, описанного в локальном Git-репозитории.

Запуск пайплайна и проверка вывода

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

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

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

    История сборок проекта Pipeline

  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 в репозитории.

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

Реальные пайплайны состоят из нескольких этапов, таких как сборка, тестирование и развертывание приложения. 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 Stage View, показывающий этапы Build, Test, Deploy

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

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

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

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

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

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

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

pipeline {
    agent any
    environment {
        DEPLOY_TARGET = 'staging'
    }
    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-репозитория.
  • Понимать структуру декларативного пайплайна с несколькими этапами.
  • Запускать пайплайн и анализировать вывод консоли.
  • Наблюдать за тем, как пайплайны структурируются в логические этапы для ясности и организации.
  • Понимать, как определяются и используются переменные окружения для создания более динамичных пайплайнов.

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