Проект автоматизирует 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)
1. см. файл qemu.md
Jenkins будет использовать этот файл для доступа к Kubernetes.
Выполните в терминале:
cp ~/.kube/config jenkins_kubeconfig.yamlСоздайте файл .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
Для полей GHCR_TOKEN и GITHUB_TOKEN нужно сгенерить токен в github Заходите в свой github, далее Settings -> Developer Settings -> Personal access tokens -> Tokens (classic) Далее либо генерируете новый токен, либо используете существующий
kubectl get pods -n testkubectl get pods -n prodhelm list -n testhelm list -n prodsudo 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