Skip to content

lebmax/JenkinsDemo

Repository files navigation

YandexHelmApp: Jenkins + Docker + Kubernetes + Helm

Что делает проект

Проект автоматизирует 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

2. Создайте файл jenkins_kubeconfig.yaml

Jenkins будет использовать этот файл для доступа к Kubernetes.

Выполните в терминале:

cp ~/.kube/config jenkins_kubeconfig.yaml

3. Создайте .env файл

Создайте файл .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.


4. Запустите Jenkins

cd jenkins
docker compose up -d --build

Jenkins будет доступен по адресу: http://localhost:8080


Как использовать

  1. Откройте Jenkins: http://localhost:8080
  2. Перейдите в задачу YandexHelmAppBuild Now
  3. Jenkins выполнит:
    • сборку и тесты
    • сборку Docker-образов
    • публикацию образов в GHCR
    • деплой в Kubernetes в два namespace: test и prod

Проверка успешного деплоя

1. Убедитесь, что в .env указаны ваши значения из github

Для полей GHCR_TOKEN и GITHUB_TOKEN нужно сгенерить токен в github Заходите в свой github, далее Settings -> Developer Settings -> Personal access tokens -> Tokens (classic) Далее либо генерируете новый токен, либо используете существующий

2. Проверка релизов

kubectl get pods -n test
kubectl get pods -n prod
helm list -n test
helm list -n prod

3. Добавьте записи в /etc/hosts

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

4. Отправьте запросы на /actuator/health

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors