0Pricing
Docker & DevOps Fundamentals · Урок

Сборка образов Docker с Jenkins

Настройте задания Jenkins для автоматической сборки и отправки образов Docker в реестр после изменений кода.

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

Автоматизация сборок Docker

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

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

Сборка образов Docker с Jenkins — иллюстрация 1

Предварительные требования для Jenkins и Docker

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

Вам также понадобятся:

  • Работающий сервер Jenkins (из урока 1)
  • Доступ к реестру Docker (например, Docker Hub)
  • Пример приложения и его файл Dockerfile

Установка Docker на хосте Jenkins

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

Вот как можно настроить это в системе Linux:

sudo apt-get update
sudo apt-get install -y docker.io
sudo usermod -aG docker jenkins
sudo systemctl restart docker
sudo systemctl restart jenkins

Защита учётных данных реестра

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

Для этого отлично подходит встроенная в Jenkins функция Credentials:

  • Перейдите в раздел Manage Jenkins > Manage Credentials.
  • Добавьте новые учётные данные Username with password для своего реестра Docker.
  • Присвойте им понятный ID (например, dockerhub-credentials), чтобы ссылаться на них позже.

Пример приложения Flask

Воспользуемся очень простым приложением Flask на Python. Поместим его в файл с именем app.py. Оно будет выводить простое сообщение «Hello».

Также понадобится файл requirements.txt, в котором будут указаны зависимости Python.

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello from CoddyKit!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

# requirements.txt
Flask==2.0.2

Создание Dockerfile

Теперь определим наш образ Docker с помощью Dockerfile. Этот файл укажет Docker, как собрать образ приложения.

Поместите этот Dockerfile в тот же каталог, что и app.py с requirements.txt.

# Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]

Задание Jenkins: этап сборки

Теперь настроим свободное задание Jenkins. В разделе Build Steps добавьте этап Execute shell. Эта команда соберёт образ Docker.

Не забудьте заменить yourusername на имя пользователя Docker Hub или путь к реестру.

# In Jenkins 'Execute shell' build step:
docker build -t yourusername/coddykit-app:latest .

Задание Jenkins: этап входа и отправки

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

Добавьте ещё один этап Execute shell. Если всё настроено правильно, Jenkins передаст учётные данные в виде переменных окружения (например, DOCKER_USER и DOCKER_PASS).

# In Jenkins 'Execute shell' build step:
echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin
docker push yourusername/coddykit-app:latest

Автоматизация запуска сборок

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

  • Опрос SCM: Jenkins периодически проверяет ваш репозиторий Git на наличие новых фиксаций.
  • Веб-перехватчики: ваш поставщик Git (GitHub, GitLab, Bitbucket) отправляет Jenkins уведомление при каждой отправке кода.
  • Проекты-источники: запуск происходит после успешного завершения другого задания Jenkins.

Тестирование задания Jenkins

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

Успешный запуск означает, что ваш конвейер CI теперь может автоматически создавать и сохранять новые образы Docker при каждом изменении кода!

Быстрая проверка

Вы настроили задание Jenkins для сборки и отправки образа Docker. В вашем репозитории Git появились новые изменения кода.

Итоги: сборка и отправка

Отличная работа! В этом уроке вы научились:

  • Готовить среду Jenkins к взаимодействию с Docker.
  • Безопасно управлять учётными данными реестра Docker в Jenkins.
  • Настраивать задание Jenkins для сборки образа Docker с использованием Dockerfile.
  • Отправлять только что собранный образ в реестр Docker.
  • Понимать различные способы запуска автоматических сборок.

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

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

Урок «Сборка образов Docker с Jenkins» бесплатный?

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

Чему я научусь в уроке «Сборка образов Docker с Jenkins»?

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

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

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

Сколько времени занимает урок «Сборка образов Docker с 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