0Pricing
Docker & DevOps Fundamentals · Урок

Автоматическое развёртывание с Jenkins

Создайте в Jenkins конвейер CI/CD для развёртывания контейнеров Docker в целевом окружении.

«Автоматическое развёртывание с Jenkins» — бесплатный урок Docker & DevOps Fundamentals на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Docker & DevOps Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Введение в автоматическое развёртывание

Добро пожаловать в заключительный урок о CI/CD с Jenkins и Docker! Сегодня мы сосредоточимся на автоматизации развёртывания контейнеров Docker.

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

Автоматическое развёртывание с Jenkins — иллюстрация 1

Зачем автоматизировать развёртывание?

Ручное развёртывание приложений может быть медленным, подверженным ошибкам и непоследовательным. Автоматизация решает эти проблемы:

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

Этапы конвейера развёртывания

Типичный конвейер Jenkins для развёртывания Docker включает несколько ключевых этапов:

  • Сборка: сборка образа Docker (рассматривалась в предыдущих уроках).
  • Тестирование: запуск автоматических тестов для образа.
  • Отправка: отправка образа в реестр Docker.
  • Развёртывание: загрузка образа из реестра и запуск на целевом сервере.
  • Проверка: подтверждение работоспособности нового развёртывания.

Сегодня мы сосредоточимся на этапах «Развёртывание» и «Проверка».

Настройка целевой среды

Прежде чем Jenkins сможет выполнить развёртывание, целевой сервер должен быть готов. Обычно это означает следующее:

  • Установленный Docker: на целевом сервере должен быть установлен Docker Engine.
  • Доступ по SSH: Jenkins нужен защищённый доступ по SSH к целевому серверу.
  • Разрешения пользователя: пользователь SSH должен иметь разрешения на выполнение команд Docker.

Обычно мы безопасно управляем учётными данными SSH непосредственно в Jenkins.

Учётные данные Jenkins для SSH

Для подключения к удалённому серверу Jenkins использует учётные данные SSH. Обычно это пары «имя пользователя SSH и закрытый ключ», безопасно хранящиеся в менеджере учётных данных Jenkins.

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

Пример простого сценария развёртывания

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

APP_NAME и IMAGE_NAME будут переданы как переменные окружения.

#!/bin/bash

# Stop and remove existing container
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true

# Pull the new Docker image
docker pull ${IMAGE_NAME}

# Run the new container
docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}

echo "Deployment of ${APP_NAME} complete!"

Интеграция с конвейером Jenkins

В Jenkinsfile можно использовать подключаемый модуль sshPublisher или простой этап sh с перенаправлением агента SSH для выполнения команд на удалённом хосте. Ниже показано, как может выглядеть этап развёртывания с использованием простого этапа sh, если SSH уже настроен.

agent { label 'remote-deploy-host' } означает, что этот этап выполняется на целевом сервере.

stage('Deploy to Production') {
  agent { label 'remote-deploy-host' } 
  steps {
    withEnv([
      "APP_NAME=my-webapp",
      "IMAGE_NAME=myregistry/my-webapp:latest"
    ]) {
      sh '''
        docker stop ${APP_NAME} || true
        docker rm ${APP_NAME} || true
        docker pull ${IMAGE_NAME}
        docker run -d --name ${APP_NAME} -p 80:80 ${IMAGE_NAME}
        echo "Deployment successful!"
      '''
    }
  }
}

Выполнение обновлений без простоя

Для развёртывания без простоя простой остановки и запуска недостаточно. Обычно используют такую стратегию:

  • Постепенное обновление: постепенно заменяйте старые контейнеры новыми по одному, сохраняя доступность сервиса.
  • Сине-зелёное развёртывание: разверните новую версию (зелёную) рядом со старой (синей), а затем переключите трафик.

Jenkins может координировать эти действия, но такие инструменты, как Docker Swarm или Kubernetes, имеют встроенную поддержку более продвинутых стратегий.

Проверка развёртывания

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

  • Проверки работоспособности: простые HTTP-запросы GET к конечной точке проверки работоспособности приложения.
  • Мониторинг журналов: проверку журналов контейнера на наличие ошибок.
  • Интеграционные тесты: быстрый набор тестов для только что развёрнутой версии.

В конвейер Jenkins можно включить этап «Проверка» для автоматизации этих проверок.

Проверьте свои знания

Рассмотрите следующий фрагмент Jenkinsfile для этапа развёртывания. Каково основное назначение docker stop ${APP_NAME} || true?

Итоги: автоматическое развёртывание

Отличная работа! Вы узнали, как выполнять автоматическое развёртывание с помощью Jenkins и Docker.

  • Автоматическое развёртывание обеспечивает быстрый, надёжный и согласованный выпуск.
  • Целевым средам нужны Docker и доступ по SSH.
  • Jenkins использует защищённые учётные данные для подключения к удалённым серверам.
  • Сценарии развёртывания обычно останавливают старые контейнеры, загружают новые образы и запускают новые контейнеры.
  • Этапы проверки крайне важны для подтверждения успешного развёртывания.

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

Часто задаваемые вопросы

Урок «Автоматическое развёртывание с Jenkins» бесплатный?

Да — полный текст урока «Автоматическое развёртывание с Jenkins» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Docker & DevOps Fundamentals, подпишись на CoddyKit PRO. Курс Docker & DevOps Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Автоматическое развёртывание с Jenkins»?

Создайте в Jenkins конвейер CI/CD для развёртывания контейнеров Docker в целевом окружении. Ты практикуешь Docker & DevOps Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Docker & DevOps Fundamentals?

Предыдущий опыт не требуется. Docker & DevOps Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Автоматическое развёртывание с Jenkins»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Docker & DevOps Fundamentals?

Да. Каждый урок Docker & DevOps Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Введение в Jenkins
  2. Сборка образов Docker с Jenkins
  3. Автоматическое развёртывание с Jenkins
  4. Jenkins Pipeline как код с Jenkinsfile
← Назад к Docker & DevOps Fundamentals