Крок за кроком: Посібник по CI/CD pipeline з Git, Jenkins, Docker і Kubernetes

Вступити в автоматизацію процесу розгортання додатків стало важливим кроком для сучасної розробки. Замість того щоб вручну проходити через кожну зміну в коді, тестування та розгортання, можна налаштувати систему, яка автоматично виконує ці кроки, забезпечуючи швидкість, точність і зменшення людських помилок. CI/CD pipeline — це те, що вам потрібно для автоматизації всіх цих етапів.

Цей посібник охоплює процес налаштування повноцінного CI/CD pipeline за допомогою інструментів як Git, Jenkins, Docker і Kubernetes. Завдяки цьому ви зможете автоматично проводити зміни від коміту до продакшн-середовища з мінімальним втручанням людини.

Що ми зробимо: налаштуємо pipeline, який:

  1. Виявляє зміни в коді в репозиторії на Git
  2. Автоматично будує Docker-образ
  3. Завантажує його на DockerHub
  4. Розгортає оновлений додаток у Kubernetes
  5. Робить додаток доступним через ресурс Ingress

Прикладом буде простий додаток на Python Flask, хоча ці принципи можна застосувати до будь-якого іншого додатку.

Перед тим, як почати, переконайтеся, що у вас є наступне:

  • Комп'ютер з Docker
  • Встановлений Git і акаунт на GitHub
  • Акаунт на DockerHub
  • Доступ до Kubernetes кластера
  • Базові знання командного рядка

Крок 1: Встановлення Docker

  1. Перейдіть на офіційний сайт Docker і завантажте Docker Desktop для вашої операційної системи.
  2. Дотримуйтесь інструкцій з інсталяції.
  3. Перевірте, чи все встановлено коректно, ввівши команду:

docker - version

Крок 2: Налаштування Jenkins через Docker

Для локальної інсталяції Jenkins скористаємося Docker:

  1. Відкрийте термінал і запустіть 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

  1. Перевірте, чи працює Jenkins:

docker ps -a

  1. Отримайте початковий пароль для Jenkins:

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

Крок 3: Встановлення необхідних інструментів в Jenkins

  1. У контейнері Jenkins відкрийте термінал як root:

docker exec -u root -it jenkins bash

  1. Оновіть список пакетів і встановіть необхідні інструменти для Docker:

apt-get update
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

Крок 4: Налаштування GitHub репозиторію

  1. Створіть репозиторій на GitHub з ім’ям hello-world-python.
  2. Клонуйте його на локальний комп’ютер:

git clone https://github.com/yourusername/hello-world-python.git
cd hello-world-python

Крок 5: Створення Dockerfile

  1. Створіть Dockerfile для вашого додатку:

nano Dockerfile

  1. Вміст 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 файлів

  1. Створіть папку для ресурсів Kubernetes:

mkdir yaml

  1. Створіть файл для розгортання:

nano yaml/deployment.yaml

Крок 7: Створення Ingress файлу

  1. Створіть файл для Ingress:

nano yaml/ingress.yaml

Крок 8: Створення Jenkinsfile

  1. Створіть Jenkinsfile:

nano Jenkinsfile

  1. Вміст Jenkinsfile:

pipeline {
agent any
environment {
DOCKERHUBCREDENTIALS = credentials('dockerhub-credentials')
GITHUB
CREDENTIALS = credentials('github-credentials')
KUBECONFIG = credentials('kubernetes-config')
DOCKER
REPOSITORY = '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 ${DOCKER
REPOSITORY}/${PROJECT_NAME}:${VERSION} \
--platform="linux/amd64" .
"""
}
}
}
}
}

Крок 9: Перевірка та запуск

  1. Створіть pull request на GitHub і злийте зміни.
  2. Перевірте виконання pipeline в Jenkins.
  3. Перевірте, чи додаток успішно деплоїться в Kubernetes.

Висновок

Ви успішно налаштували CI/CD pipeline, що автоматизує процеси побудови, завантаження та деплою вашого додатку. З цього моменту ви можете зосередитись на розробці нових функцій і впевненості в тому, що ваші зміни будуть коректно оброблені за допомогою стабільного та надійного процесу.

Наступні кроки: додайте автоматизовані тести, налаштуйте сповіщення, впровадьте сканування на вразливості та багато іншого для покращення pipeline.

Перекладено з: Step By Step CI/CD Pipeline Guide with Git, Jenkins, Docker, and Kubernetes