Пошаговое руководство по настройке CI/CD-конвейеров в Jenkins

watch 7m, 24s
views 2

08:53, 18.02.2025

Содержание статьи
arrow

  • Что вам понадобится
  • Шаги по настройке Jenkins
  • Как получить доступ к приборной панели Jenkins
  • Настройка параметров Jenkins
  • Установите необходимые плагины
  • Настройка учетных данных
  • Определение глобальных настроек инструментов
  • Создайте свой первый конвейер
  • Начало нового проекта Jenkins
  • Написание Jenkinsfile
  • Определение триггеров сборки
  • Запуск задания конвейера
  • Подключение Jenkins к системе контроля исходных текстов
  • Связка с репозиториями GitHub
  • Управление сборками ответвлений и PR
  • Настройка уведомлений о сборке
  • Конфигурация уведомлений по электронной почте
  • Настройка интеграции со Slack или Teams
  • Интеграция со Slack
  • Интеграция с Microsoft Teams

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

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

Что вам понадобится

Прежде чем мы начнем, убедитесь, что у вас есть:

  • Развернутый сервер с выбранной вами ОС.
  • Установленная Java (JDK 11 или более поздняя версия) на сервере.
  • Установленный Git на сервере для репозиториев кода.
  • (Необязательно) Установленный Docker для контейнерных приложений.
  • Доступ к серверу по SSH с правами администратора.

Шаги по настройке Jenkins

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

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

Пошаговое руководство по настройке ci/cd-конвейеров в jenkins

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

Пошаговое руководство по настройке ci/cd-конвейеров в jenkins

Далее вам нужно будет указать папку для установки программы.

Пошаговое руководство по настройке ci/cd-конвейеров в jenkins

Наконец, вам нужно будет указать учетные данные для входа в службу.

Пошаговое руководство по настройке ci/cd-конвейеров в jenkins

Здесь убедитесь, что вы запускаете Jenkins от имени локального или доменного пользователя, потому что если Jenkins запустится от имени LocalSystem, он получит полный доступ к вашей машине, что совсем небезопасно.

Чтобы запустить Jenkins от имени локального или доменного пользователя, вам нужно ввести имя пользователя домена и пароль к учетной записи, с которой вы хотите запустить Jenkins, затем нажать на Test Credentials, чтобы проверить их, и затем нажать на Next. После этого вам будет предложено:

  • выбрать порт, на котором будет работать Jenkins, а затем протестировать его.
  • выбрать домашний каталог Java.
  • выбрать другие службы, которые вы хотите установить вместе с Jenkins.
  • подтвердить установку.

Альтернативно, подготовив свой сервер, вы можете установить Jenkins, выполнив следующие шаги:

  1. Добавьте ключ Jenkins GPG и репозиторий:

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \https://pkg.jenkins.io/debian/jenkins.io-2023.keyecho "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \https://pkg.jenkins.io/debian binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null

  1. Обновите список пакетов: sudo apt update

  2. Установите Jenkins: sudo apt install jenkins

  3. Запустите и включите службу Jenkins: sudo systemctl start jenkins sudo systemctl enable jenkins

Как получить доступ к приборной панели Jenkins

Когда Jenkins запущен, вы можете получить доступ к пользовательскому интерфейсу Jenkins для первоначальной настройки:

  1. Откройте веб-браузер и перейдите по адресу http://<your-server-ip>:8080.

  2. Чтобы разблокировать Jenkins, получите пароль администратора, выполнив команду:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

  1. Введите пароль в пользовательском интерфейсе Jenkins и следуйте указаниям мастера настройки.

  2. Установите предложенные плагины.

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

После завершения настройки вы будете перенаправлены на приборную панель Jenkins, чтобы начать настройку вашего CI/CD-конвейера.

Настройка параметров Jenkins

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

Установите необходимые плагины

Истинная сила Jenkins заключается в обширной экосистеме плагинов, которая позволяет настраивать систему под себя. Чтобы начать работу с конвейером CI/CD, вам нужно установить несколько необходимых плагинов:

  • Git Plugin: Он позволяет Jenkins взаимодействовать с репозиториями Git, позволяя клонировать, выстраивать и отправлять код.

Перейдите в Jenkins Dashboard > Manage Jenkins > Manage Plugins > Available. Найдите Git Plugin и установите его.

  • Pipeline Plugin: Этот плагин необходим для определения и выполнения конвейеров Jenkins через Jenkinsfile, он автоматизирует процессы сборки, тестирования и развертывания.

Найдите Pipeline и установите его.

  • Docker Pipeline Plugin(необязательно): Если вы планируете интегрировать Docker в ваш конвейер, этот плагин позволит вам включать команды Docker в ваш Jenkinsfile, облегчая сборку и управление контейнерами Docker.

Найдите Docker Pipeline и установите его.

  • Credentials Binding Plugin: Этот плагин помогает безопасно управлять и использовать учетные данные в ваших конвейерах, например API-токены или пароли.

Найдите Credentials Binding Plugin и установите его.

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

Настройка учетных данных

Чтобы Jenkins мог безопасно взаимодействовать с GitHub, Docker Hub или другими сторонними системами, вам необходимо настроить и управлять учетными данными. Вот как это можно сделать:

  1. Перейдите в раздел Учетные данные:

  • Перейдите в Jenkins Dashboard > Manage Jenkins > Manage Credentials.
  1. Добавьте учетные данные

  • Выберите соответствующий домен (обычно Global, если вы не организуете учетные данные по проектам). 
  • Щелкните (global) под Stores scoped to Jenkins, затем выберите Add Credentials.
  1. Выберите тип учетных данных

  • Для GitHub или GitLab выберите Username with password or Secret text (для API-токенов).
  • Для Docker Hub выберите Username with password. Введите необходимые данные, такие как имя пользователя, пароль или API-токен, и укажите значимый идентификатор для удобства использования.
  1. Сохраните учетные данные

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

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

Определение глобальных настроек инструментов

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

  1. Перейдите к настройке глобальных инструментов

  • Перейдите в Jenkins Dashboard > Manage Jenkins > Global Tool Configuration.
  1. Настройте Git:

  • В разделе Git нажмите Add Git.
  • Если Git установлен в стандартном месте, Jenkins должен автоматически его обнаружить. Если нет, укажите путь к исполняемому файлу Git.
  1. Настройте Maven (если возможно)

  • Если ваш проект использует Maven для сборки, прокрутите страницу до Maven, нажмите Add Maven и либо позвольте Jenkins установить его автоматически, либо укажите путь установки.
  1. Настройка Gradle (если возможно)

  • Аналогично Maven, в разделе Gradle нажмите Add Gradle и выберите автоматическую установку или укажите путь.

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

Создайте свой первый конвейер

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

Начало нового проекта Jenkins

Jenkins предоставляет различные типы заданий. Для конвейера CI/CD тип задания Pipeline обычно является лучшим выбором благодаря своей гибкости и совместимости с Jenkinsfiles.

  1. Перейдите к новому элементу

  • На панели инструментов Jenkins нажмите кнопку New Item(Новый элемент).
  1. Выберите тип задания

  • Введите имя задания (например, MyFirstPipeline). Выберите Pipeline из списка типов заданий и нажмите OK.
  1. Настройте задание

  • Вы попадете на страницу конфигурации задания, где сможете настроить поведение конвейера.

Тип задания Pipeline идеально подходит для сложных рабочих процессов CI/CD, поскольку позволяет определить весь конвейер в Jenkinsfile, что упрощает управление и контроль версий.

Написание Jenkinsfile

Jenkinsfile – это текстовый файл, который определяет ваш CI/CD-конвейер в виде кода. Этот файл пишется с использованием языка домена (DSL), предоставляемого Jenkins, и обычно хранится в корневом каталоге репозитория контроля исходных текстов вашего проекта. Он описывает шаги, которые Jenkins должен предпринять для сборки, тестирования и развертывания вашего приложения.

  1. Понимание структуры Jenkinsfile:

  • Базовый Jenkinsfile обычно включает такие этапы, как Build, Test и Deploy. Каждый этап содержит шаги, которые определяют действия, выполняемые Jenkins.
  1. Создайте простой Jenkinsfile:

pipeline { agent any
stages {
    stage('Clone Repository') {
        steps {
            git '<https://github.com/your-repo/your-project.git>'
        }
    }
    stage('Build') {
        steps {
            // Example build step
            sh 'make build'
        }
    }
    stage('Test') {
        steps {
            // Example test step
            sh 'make test'
        }
    }
}
}
  • pipeline: Блок верхнего уровня, определяющий весь конвейер.
  • agent: Определяет, где должен выполняться конвейер; any означает, что он может выполняться на любом доступном агенте.
  • stages: Блок, содержащий все стадии конвейера.
  • stage: Определяет отдельный этап конвейера, например Clone Repository, Build или Test.
  • steps: Команды или действия, которые Jenkins выполняет на каждом этапе.
  1. Добавьте Jenkinsfile в свой репозиторий:

Сохраните Jenkinsfile в корневом каталоге репозитория вашего проекта.

Определение триггеров сборки

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

  1. Перейдите к разделу Построение триггеров: На странице конфигурации задания прокрутите вниз до раздела Build Triggers.

  2. Выберите метод триггера: 

  • Poll SCM: Jenkins будет периодически проверять ваш репозиторий исходного кода на наличие изменений. Установите частоту опроса (например, *H/5 * * * ** для каждых 5 минут).
  • GitHub Hook Trigger: Для пользователей GitHub настройте веб-хук для автоматического запуска конвейера при появлении нового push- или pull-запроса.
  • Build Periodically: Запланируйте запуск конвейера через определенные промежутки времени с помощью синтаксиса, напоминающего cron.
  • Ручной триггер: Запускайте сборки вручную с панели управления Jenkins, когда это необходимо.
  1. Настройте триггер: Для веб-хуков убедитесь, что ваш репозиторий настроен на отправку POST-запросов в Jenkins при изменениях. Jenkins будет прослушивать эти запросы и запускать конвейер соответствующим образом.

Запуск задания конвейера

  1. Запустите конвейер: На странице задания нажмите Build Now, чтобы вручную запустить конвейер. Если вы настроили автоматические триггеры, конвейер запустится автоматически при наступлении указанного события (например, при переносе кода).
  2. Следите за процессом сборки: Jenkins будет показывать прогресс на каждом этапе в реальном времени. Вы можете просматривать журналы, проверять состояние каждого этапа и решать возникающие проблемы. Если конвейер завершен успешно, вы увидите зеленую галочку для всех этапов.
  3. Просмотр результатов: После завершения конвейера просмотрите журналы сборки и результаты. Jenkins предоставит подробную информацию о выполненных этапах, возникших ошибках, а также об общем успехе или неудаче конвейера.

Подключение Jenkins к системе контроля исходных текстов

Интеграция Jenkins с системами контроля версий, такими как GitHub или GitLab, очень важна для автоматизации конвейера CI/CD. Вам нужно настроить Jenkins на автоматический запуск сборок при внесении изменений в репозиторий.

Связка с репозиториями GitHub

Чтобы начать работу, вам необходимо подключить Jenkins к вашему репозиторию GitHub или GitLab. Это соединение позволит Jenkins получать уведомления (webhooks) об изменениях в вашем репозитории и безопасно аутентифицироваться при доступе к вашей кодовой базе.

  1. Настройте аутентификацию: 

  • Сгенерируйте персональный токен доступа: Перейдите в GitHub > Настройки > Настройки разработчика > Персональные токены доступа > Сгенерировать новый токен. Выберите необходимые диапазоны, например repo и admin: repo_hook.
  • Добавьте токен в Jenkins: в Jenkins перейдите в Manage Jenkins > Manage Credentials > (global) > Add Credentials.
  • Выберите Secret text для токена, введите токен и присвойте ему описательный идентификатор (например, github-token).
  1. Настройте Webhooks: Зайдите в свой репозиторий на GitHub и перейдите в раздел Settings > Webhooks > Add webhook. Установите URL-адрес нагрузки на http://your-jenkins-url/github-webhook/ и выберите application/json в качестве типа содержимого. Выберите события, которые будут вызывать веб-хук, обычно это Just the push event и Pull requests.

  2. Настройте задание Jenkins: 

  • Свяжите с репозиторием: В конфигурации задания Jenkins, в разделе Pipeline, укажите URL вашего репозитория в формате https://github.com/your-repo/your-project.git.
  • Используйте учетные данные: Убедитесь, что Jenkins использует учетные данные (персональный маркер доступа), которые вы добавили ранее. Выберите эти учетные данные из выпадающего списка Credentials в разделе SCM конфигурации задания.

После настройки аутентификации и веб-хуков Jenkins будет подключен к вашему репозиторию GitHub или GitLab, что позволит ему извлекать ваш код и запускать сборки автоматически.

Управление сборками ответвлений и PR

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

  1. Настройте многофилиальный конвейер: Задание Multibranch Pipeline в Jenkins автоматически создает конвейеры для всех веток в репозитории, создавая каждую ветку на основе собственного Jenkinsfile.

  • Создайте задание Multibranch Pipeline: На панели инструментов Jenkins нажмите New Item и выберите Multibranch Pipeline. Назовите задание (например, MyProject-Multibranch).
  • Настройте источники ветвей: В конфигурации задания в разделе Branch Sources добавьте свой репозиторий GitHub и используйте учетные данные, которые вы установили ранее.
  • Установите триггеры Scan Multibranch Pipeline Triggers для периодической проверки новых веток или обновлений или для ответа на события webhook.

2. Конфигурация сборки ветки: Jenkins автоматически обнаруживает и собирает все ветки с Jenkinsfile. Вы можете настроить, как будут обрабатываться различные ветки.

  • Исключения и фильтры: Исключите определенные ветки из сборки, настроив Property Strategy в источниках веток. Например, вы можете использовать регулярное выражение, чтобы отфильтровать ветки с определенными шаблонами имен.
  • Специфическая конфигурация ветвей: Определите специфическое поведение ветвей с помощью директивы when в вашем Jenkinsfile. Например, вы можете указать, что определенные этапы выполняются только для главной ветки:
stage('Deploy') { 
when { 
branch 'main' 

steps { 
// Deployment steps here } 
}

3. Сборка pull-запросов: Jenkins может автоматически формировать pull-запросы для тестирования предлагаемых изменений перед их слиянием с основной веткой.

  • Включите сборку pull-запросов: В конфигурации задания Multibranch Pipeline Jenkins обнаружит pull-запросы, если используется поддерживаемый источник, например GitHub или GitLab. Эти запросы будут отображаться как отдельные ветки и могут быть собраны аналогично другим веткам.
  • Настройка отчетов о состоянии: Jenkins может сообщать о статусе сборки pull-запросов обратно на GitHub или GitLab, позволяя вам видеть результаты сборки непосредственно в pull-запросе.
  • Убедитесь, что ваш персональный токен доступа имеет необходимые разрешения (repo:status для GitHub или api для GitLab).

Настройка уведомлений о сборке

Чтобы ваша команда всегда была в курсе состояния сборки и развертывания, необходимо настроить уведомления в Jenkins. Уведомления можно отправлять по электронной почте или интегрировать с такими инструментами совместной работы, как Slack или Microsoft Teams, чтобы все были в курсе успеха или неудачи каждого конвейера.

Конфигурация уведомлений по электронной почте

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

  1. Установите плагин Email Extension:

  • Перейдите в Jenkins Dashboard > Manage Jenkins > Manage Plugins > Available, найдите плагин Email Extension Plugin и установите его, если он еще не установлен.
  1. Настройте SMTP-сервер:

  • Перейдите в Manage Jenkins > Configure System.
  • Прокрутите страницу до раздела Extended E-mail Notification и введите данные вашего SMTP-сервера:
  • SMTP-сервер: Адрес вашего почтового сервера (например, smtp.yourdomain.com).
  • SMTP-порт: Используйте 587 для TLS или 465 для SSL.
  • SMTP-аутентификация: Установите этот флажок, если ваш сервер требует ввода имени пользователя и пароля.

  • Использовать SSL/TLS: включите эту опцию, если ваш SMTP-сервер требует SSL или TLS.

  1. Настройте уведомления по электронной почте в конвейере: Вы можете определить уведомления по электронной почте непосредственно в Jenkinsfile, чтобы отправлять оповещения на основе статуса сборки:

groovy
Copy code
pipeline {
    agent any


    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
    }


    post {
        success {
            emailext subject: "Build Success: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                     body: "Good news! The build succeeded.",
                     to: 'team@example.com'
        }
        failure {
            emailext subject: "Build Failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                     body: "Oops! The build failed. Please check the logs.",
                     to: 'team@example.com'
        }
    }
}
  • post: Этот блок определяет действия, которые выполняются после завершения конвейера, например отправка электронных писем.
  • success и failure: Указывает, что делать при успешной или неудачной сборке. Шаг emailext отправляет письмо с соответствующей темой и наполнением.

Настройка интеграции со Slack или Teams

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

Интеграция со Slack

  1. Установите плагин Slack Notification Plugin: 

  • Перейдите в Jenkins Dashboard > Manage Jenkins > Manage Plugins > Available.
  • Найдите Slack Notification Plugin, установите его и при необходимости перезапустите Jenkins.
  1. Настройте интеграцию со Slack:

  • Перейдите в раздел Manage Jenkins > Configure System.
  • Прокрутите страницу вниз до раздела Slack и введите следующие данные:
  • Рабочее пространство: Введите имя рабочего пространства Slack.
  • Учетные данные: Добавьте свой токен интеграции Slack (полученный при создании входящего вебхука или через приложение Slack для Jenkins CI).
  • Канал по умолчанию: Укажите канал Slack, на который уведомления будут отправляться по умолчанию.
  1. Добавьте уведомления Slack в Jenkinsfile:

groovy
Copy code
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
    }
    post {
        success {
            slackSend channel: '#build-notifications', color: 'good',
                      message: "Build Success: ${env.JOB_NAME} #${env.BUILD_NUMBER}"
        }
        failure {
            slackSend channel: '#build-notifications', color: 'danger',
                      message: "Build Failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}"
        }
    }
}

Интеграция с Microsoft Teams

  1. Создайте входящий веб-крючок в Microsoft Teams:

  • В Microsoft Teams перейдите на канал, на котором вы хотите получать уведомления.
  • Перейдите к разделу More options (⋯) > Connectors > Incoming Webhook и скопируйте предоставленный URL.
  1. Установите плагин Microsoft Teams Notification Plugin:

  • Перейдите в Jenkins Dashboard > Manage Jenkins > Manage Plugins > Available.
  • Найдите плагин Office 365 Connector Plugin, установите его и при необходимости перезапустите Jenkins.
  1. Настройте интеграцию с Teams:

  • Перейдите на страницу конфигурации задания Jenkins.
  • Прокрутите страницу до раздела Office 365 Connector и вставьте URL-адрес веб-хука из Teams.
  1. Добавьте уведомления Teams в файл Jenkins:

groovy
Copy code
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'make build'
            }
        }
    }
    post {
        success {
            office365ConnectorSend message: "Build Success: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                                   webhookUrl: 'YOUR_WEBHOOK_URL'
        }
        failure {
            office365ConnectorSend message: "Build Failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                                   webhookUrl: 'YOUR_WEBHOOK_URL'
        }
    }
}

Такая настройка гарантирует, что ваша команда будет получать уведомления в реальном времени в Slack или Microsoft Teams, информируя всех о состоянии процесса сборки.

Поделиться

Была ли эта статья полезной для вас?

Популярные предложения VPS

Другие статьи на эту тему

cookie

Принять файлы cookie и политику конфиденциальности?

Мы используем файлы cookie, чтобы обеспечить вам наилучший опыт работы на нашем сайте. Если вы продолжите работу без изменения настроек, мы будем считать, что вы согласны получать все файлы cookie на сайте HostZealot.