Проект автоматизирует CI/CD процесс для двух микросервисов — customer-service и order-service. Он выполняет:
- сборку и тестирование кода;
- сборку Docker-образов;
- публикацию образов в GitHub Container Registry (GHCR);
- деплой в кластер Kubernetes с помощью Helm.
Все этапы выполняются через Jenkins Pipeline.
- Jenkins (в Docker-контейнере)
- Kubernetes (включён в Docker Desktop)
- Helm и kubectl (предустановлены в контейнере Jenkins)
- Docker Registry: GHCR
- Helm-чарты для каждого сервиса
- CI/CD pipeline (
Jenkinsfile)
Для запуска проекта вам понадобятся:
- Docker Desktop
- Включённый Kubernetes в Docker Desktop (настройка → Kubernetes → Enable Kubernetes)
- Установленный Git
Устанавливать Helm или kubectl локально не нужно — они уже установлены в Jenkins-контейнере.
Jenkins работает с удалённым репозиторием. Поэтому проект нужно сразу разместить в вашем аккаунте на GitHub.
Выполните в терминале:
git init
git remote add origin https://github.com/<your-username>/YandexHelmApp.git
git add .
git commit -m "Initial commit"
git push -u origin masterJenkins будет использовать этот файл для доступа к Kubernetes.
Выполните в терминале:
cp ~/.kube/config jenkins_kubeconfig.yamlЗатем отредактируйте файл:
Замените server на:
server: https://host.docker.internal:6443Добавьте:
insecure-skip-tls-verify: trueЭто нужно, чтобы Jenkins внутри контейнера смог обратиться к вашему локальному кластеру и проигнорировал самоподписанные сертификаты.
Ingress Controller — это компонент, который позволяет обращаться к сервисам Kubernetes через удобные HTTP-домены (например, http://order.test.local).
Мы используем ingress-nginx. Установите его в кластер:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespaceСоздайте файл .env в корне проекта:
# Путь до локального kubeconfig-файла
KUBECONFIG_PATH=/Users/username/.kube/jenkins_kubeconfig.yaml
# Параметры для GHCR
GITHUB_USERNAME=your-username
GITHUB_TOKEN=ghp_...
GHCR_TOKEN=ghp_...
# Docker registry (в данном случае GHCR)
DOCKER_REGISTRY=ghcr.io/your-username
GITHUB_REPOSITORY=your-username/YandexHelmApp
# Пароль к базе данных PostgreSQL
DB_PASSWORD=your-db-passwordУбедитесь, что ваш GitHub Token имеет права
write:packages,read:packagesиrepo.
cd jenkins
docker compose up -d --buildJenkins будет доступен по адресу: http://localhost:8080
- Откройте Jenkins: http://localhost:8080
- Перейдите в задачу
YandexHelmApp→Build Now - Jenkins выполнит:
- сборку и тесты
- сборку Docker-образов
- публикацию образов в GHCR
- деплой в Kubernetes в два namespace:
testиprod
sudo nano /etc/hostsДобавьте:
127.0.0.1 customer.test.local
127.0.0.1 order.test.local
127.0.0.1 customer.prod.local
127.0.0.1 order.prod.local
curl -s http://customer.test.local/actuator/health
curl -s http://order.test.local/actuator/health
curl -s http://customer.prod.local/actuator/health
curl -s http://order.prod.local/actuator/healthОжидаемый ответ:
{"status":"UP","groups":["liveness","readiness"]}Если вы хотите полностью остановить Jenkins, удалить namespace'ы test и prod, а также все установленные ресурсы, используйте скрипт nuke-all.sh.
Он находится в папке jenkins:
cd jenkins
./nuke-all.sh