Вступити в автоматизацію процесу розгортання додатків стало важливим кроком для сучасної розробки. Замість того щоб вручну проходити через кожну зміну в коді, тестування та розгортання, можна налаштувати систему, яка автоматично виконує ці кроки, забезпечуючи швидкість, точність і зменшення людських помилок. CI/CD pipeline — це те, що вам потрібно для автоматизації всіх цих етапів.
Цей посібник охоплює процес налаштування повноцінного CI/CD pipeline за допомогою інструментів як Git, Jenkins, Docker і Kubernetes. Завдяки цьому ви зможете автоматично проводити зміни від коміту до продакшн-середовища з мінімальним втручанням людини.
Що ми зробимо: налаштуємо pipeline, який:
- Виявляє зміни в коді в репозиторії на Git
- Автоматично будує Docker-образ
- Завантажує його на DockerHub
- Розгортає оновлений додаток у Kubernetes
- Робить додаток доступним через ресурс Ingress
Прикладом буде простий додаток на Python Flask, хоча ці принципи можна застосувати до будь-якого іншого додатку.
Перед тим, як почати, переконайтеся, що у вас є наступне:
- Комп'ютер з Docker
- Встановлений Git і акаунт на GitHub
- Акаунт на DockerHub
- Доступ до Kubernetes кластера
- Базові знання командного рядка
Крок 1: Встановлення Docker
- Перейдіть на офіційний сайт Docker і завантажте Docker Desktop для вашої операційної системи.
- Дотримуйтесь інструкцій з інсталяції.
- Перевірте, чи все встановлено коректно, ввівши команду:
docker - version
Крок 2: Налаштування Jenkins через Docker
Для локальної інсталяції Jenkins скористаємося Docker:
- Відкрийте термінал і запустіть Jenkins у контейнері:
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-v jenkinshome:/var/jenkinshome
-p 8080:8080 \
-p 50000:50000 \
jenkins/jenkins:lts
- Перевірте, чи працює Jenkins:
docker ps -a
- Отримайте початковий пароль для Jenkins:
docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
Крок 3: Встановлення необхідних інструментів в Jenkins
- У контейнері Jenkins відкрийте термінал як root:
docker exec -u root -it jenkins bash
- Оновіть список пакетів і встановіть необхідні інструменти для Docker:
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
Крок 4: Налаштування GitHub репозиторію
- Створіть репозиторій на GitHub з ім’ям
hello-world-python
. - Клонуйте його на локальний комп’ютер:
git clone https://github.com/yourusername/hello-world-python.git
cd hello-world-python
Крок 5: Створення Dockerfile
- Створіть Dockerfile для вашого додатку:
nano Dockerfile
- Вміст Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
Крок 6: Створення Kubernetes YAML файлів
- Створіть папку для ресурсів Kubernetes:
mkdir yaml
- Створіть файл для розгортання:
nano yaml/deployment.yaml
Крок 7: Створення Ingress файлу
- Створіть файл для Ingress:
nano yaml/ingress.yaml
Крок 8: Створення Jenkinsfile
- Створіть Jenkinsfile:
nano Jenkinsfile
- Вміст Jenkinsfile:
pipeline {
agent any
environment {
DOCKERHUBCREDENTIALS = credentials('dockerhub-credentials')
GITHUBCREDENTIALS = credentials('github-credentials')
KUBECONFIG = credentials('kubernetes-config')
DOCKERREPOSITORY = 'yourdockerhubusername'
PROJECTNAME = 'hello-world-python'
NAMESPACE = 'your-namespace'
}
stages {
stage('Checkout') {
steps {
cleanWs()
checkout scm
}
}
stage('Build Docker Image') {
steps {
script {
env.VERSION = sh(script: "echo \$(date +%Y%m%d)-\$(git rev-parse --short HEAD)", returnStdout: true).trim()
sh """
docker build --no-cache -t ${DOCKERREPOSITORY}/${PROJECT_NAME}:${VERSION} \
--platform="linux/amd64" .
"""
}
}
}
}
}
Крок 9: Перевірка та запуск
- Створіть pull request на GitHub і злийте зміни.
- Перевірте виконання pipeline в Jenkins.
- Перевірте, чи додаток успішно деплоїться в Kubernetes.
Висновок
Ви успішно налаштували CI/CD pipeline, що автоматизує процеси побудови, завантаження та деплою вашого додатку. З цього моменту ви можете зосередитись на розробці нових функцій і впевненості в тому, що ваші зміни будуть коректно оброблені за допомогою стабільного та надійного процесу.
Наступні кроки: додайте автоматизовані тести, налаштуйте сповіщення, впровадьте сканування на вразливості та багато іншого для покращення pipeline.
Перекладено з: Step By Step CI/CD Pipeline Guide with Git, Jenkins, Docker, and Kubernetes