Фото від Photo-to-Canvas.com на Unsplash
Подорож DevOps: Автоматизація збірок і деплоїв за допомогою GitHub та Docker Hub
Вступ
Привіт усім і ласкаво просимо назад! У цій статті ми розглянемо автоматизацію збірки та деплою Docker-застосунків за допомогою GitHub Actions та Docker Hub. Такий підхід оптимізує життєвий цикл розробки, забезпечуючи стабільність між середовищами. Для демонстрації ми налаштуємо CI/CD конвеєр, який збирає Docker-образ і деплоїть його на Docker Hub.
Чому Docker?
Якщо ви ще не використовуєте Docker, саме час почати. Docker революціонізує процес деплою застосунків, усуваючи невідповідності між середовищами. З Docker ви можете відтворити точні налаштування як локально, так і в продакшн середовищі. Кожен застосунок працює в своєму власному ізольованому контейнері, визначеному набором конфігурацій, що гарантує надійність і ефективність.
Docker ідеально підходить для автоматизації DevOps. Ось чому:
- Сумісність середовищ: Контейнери забезпечують однакову поведінку вашого застосунку в будь-якому середовищі.
- Спрощене управління залежностями: Більше не буде конфліктів між бібліотеками чи залежностями.
- Легке масштабування: Контейнери можна швидко масштабувати та дублювати.
Чому GitHub Actions?
GitHub Actions надає потужну платформу для автоматизації CI/CD робочих процесів. Поєднуючи її з Docker Hub, ви можете:
- Автоматично збирати Docker-образи при оновленні коду.
- Завантажувати ці образи на Docker Hub для деплою.
- Підтримувати безперервну інтеграцію між контролем версій і контейнеризацією.
Огляд прикладу конвеєра
Реально налаштований приклад доступний тут: https://github.com/Mino75/Faritany/blob/main/.github/workflows/docker-image.yml
У цьому прикладі ми будемо:
- Збирати Docker-образ з репозиторію вихідного коду.
- Увійдемо в Docker Hub за допомогою GitHub Actions.
- Автоматично завантажимо образ на Docker Hub.
Цей робочий процес забезпечує мінімальне втручання вручну, дозволяючи вам зосередитись на кодуванні, автоматизуючи повторювані завдання.
Попередні вимоги
Щоб слідувати за інструкціями, вам потрібно:
- Репозиторій GitHub з необхідним кодом застосунку та Dockerfile.
- Обліковий запис на Docker Hub.
- Налаштовані GitHub Secrets з:
DOCKER_HUB_USER
: ваше ім’я користувача Docker Hub.DOCKER_HUB_TOKEN
: особистий токен доступу для Docker Hub.
Налаштування CI/CD конвеєра
Крок 1: Визначення робочого процесу GitHub Actions
У вашому репозиторії створіть файл .github/workflows/docker-ci.yaml
зі наступним вмістом:
name: Docker Image CI
on:
workflow_dispatch:jobs: build: runs-on: ubuntu-latest steps:
- uses: actions/checkout@v4
- name: Build the Docker image
run: docker build . --file Dockerfile --tag ${{ secrets.DOCKER_HUB_USER }}/myapp:1.0.0
- name: Log in to Docker Hub
uses: docker/login-action@v4
with:
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }} - name: Push Docker image to Docker Hub
run: docker push ${{ secrets.DOCKER_HUB_USER }}/myapp:1.0.0
Цей робочий процес виконує наступне:
- Отримує код: Завантажує останню версію коду з репозиторію.
- Збирає Docker-образ: За допомогою наданого
Dockerfile
збирає образ з тегом, що відповідає вашому репозиторію на Docker Hub. - Увійде в Docker Hub: Використовує облікові дані, збережені в GitHub Secrets, для аутентифікації.
- Завантажує образ на Docker Hub: Завантажує зібраний образ у ваш репозиторій на Docker Hub.
Крок 2: Налаштування Dockerfile
Переконайтесь, що у вашому репозиторії є Dockerfile
, який визначає, як будувати контейнер застосунку. Ось приклад:
# Використовувати офіційне середовище виконання Node.js як базовий образ
FROM node:16
# Встановлюємо робочу директорію
WORKDIR /app# Копіюємо package-файли та встановлюємо залежності
COPY package*.json ./
RUN npm install# Копіюємо вихідний код застосунку
COPY .
# Відкриваємо порт застосунку
EXPOSE 3000# Визначаємо команду за замовчуванням для запуску застосунку
CMD ["npm", "start"]
Крок 3: Налаштування GitHub Secrets
Перейдіть до налаштувань вашого репозиторію GitHub і додайте наступні секрети:
DOCKER_HUB_USER
: Ваше ім'я користувача на Docker Hub.DOCKER_HUB_TOKEN
: Особистий токен доступу з Docker Hub.
Крок 4: Запуск робочого процесу
Зробіть коміт змін у репозиторії або вручну запустіть робочий процес із вкладки GitHub Actions.
Перевірка робочого процесу
Після успішного виконання робочого процесу:
- Перевірте журнал GitHub Actions, щоб переконатися, що всі кроки виконано.
- Перевірте Docker-образ у вашому репозиторії Docker Hub під ім'ям
myapp:1.0.0
.
Розширення конвеєра
Цей базовий конвеєр можна розширити додатковими функціями:
- Автоматичне тестування: Додайте крок тестування перед збіркою образу.
- Тегування версії: Автоматичне тегування образів на основі тегів Git або хешів комітів.
- Мультимедійні деплої: Завантажуйте образи на декілька середовищ (наприклад, staging, production).
Переваги цього підходу
- Автоматизація: Зменшує ручну працю і забезпечує консистентність.
- Безперервна інтеграція (Continuous Integration): Перевіряє зміни в коді при кожному оновленні.
- Безшовний деплой (Seamless Deployment): Легко доставляє контейнеризовані застосунки.
Підсумок
Використовуючи Docker, Docker Hub і GitHub Actions, ви можете оптимізувати свої DevOps робочі процеси, зменшити кількість помилок і підвищити продуктивність. Цей конвеєр дає надійну основу для автоматизації деплоїв ваших застосунків, будь то для розробки, тестування чи продакшн середовищ.
Удачі в кодуванні і до нових зустрічей для наступних пригод у світі DevOps!
Перекладено з: 20 minutes step to build and publish dockerised Nodejs APP with GitHub Actions and Docker Hub : DevOps Journey in 2025