Files
examples-for-kids/.drone.yml
Николай Вигдоров 80c0b5e7e4
Some checks failed
continuous-integration/drone/push Build is pending
Deploy to pages / build (push) Has been cancelled
fix k8s config
2025-06-28 21:41:00 +03:00

81 lines
3.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

kind: pipeline
type: kubernetes
name: deploy-frontend
# Триггеры: запускать на push в ветки main и develop
trigger:
branch:
- master
- develop
event:
- push
steps:
# --- Шаг 1: Сборка и отправка образа в Harbor ---
# Этот шаг выполняется для любой из веток (main или develop)
- name: build-and-push
image: plugins/docker
settings:
# Укажите ваш домен Harbor
registry: ci.vigdorov.ru
# Имя репозитория в Harbor (например, в проекте library)
repo: ci.vigdorov.ru/library/examples-for-kids-app
# Тег будет равен первым 7 символам хеша коммита (например, a1b2c3d)
tags:
- ${DRONE_COMMIT_SHA:0:7}
# Используем секреты, которые мы создали в Drone
username:
from_secret: HARBOR_USER
password:
from_secret: HARBOR_PASSWORD
# --- Шаг 2: Развертывание в DEV-окружение ---
- name: deploy-dev
image: alpine/k8s:1.28.2 # Образ с kubectl и другими утилитами
# Запускать этот шаг ТОЛЬКО для ветки 'develop'
when:
branch:
- develop
environment:
# Используем секрет с kubeconfig
KUBECONFIG:
from_secret: KUBE_CONFIG
commands:
# Готовим переменные для dev-окружения
- 'export APP_NAMESPACE="dev-ns"' # Будем деплоить в отдельный неймспейс
- 'export HOSTNAME="dev.examples-for-kids.vigdorov.ru"'
- 'export IMAGE_TAG="${DRONE_COMMIT_SHA:0:7}"'
- 'export IMAGE_NAME="ci.vigdorov.ru/library/examples-for-kids-app"'
- 'export SECRET_NAME="dev-test-tls"'
# Создаем неймспейс, если его нет
- 'kubectl create namespace $APP_NAMESPACE --dry-run=client -o yaml | kubectl apply -f -'
# Заменяем метки в шаблонах на реальные значения и применяем
- 'sed -e "s|__IMAGE__|$IMAGE_NAME:$IMAGE_TAG|g" k8s/deployment.yaml | kubectl apply -n $APP_NAMESPACE -f -'
- 'kubectl apply -n $APP_NAMESPACE -f k8s/service.yaml'
- 'sed -e "s|__HOSTNAME__|$HOSTNAME|g" -e "s|__SECRET_NAME__|$SECRET_NAME|g" k8s/ingress.yaml | kubectl apply -n $APP_NAMESPACE -f -'
- 'echo "Deployed to DEV: https://$HOSTNAME"'
# --- Шаг 3: Развертывание в PROD-окружение ---
- name: deploy-prod
image: alpine/k8s:1.28.2
# Запускать этот шаг ТОЛЬКО для ветки 'main'
when:
branch:
- master
environment:
KUBECONFIG:
from_secret: KUBE_CONFIG
commands:
# Готовим переменные для prod-окружения
- 'export APP_NAMESPACE="prod-ns"'
- 'export HOSTNAME="examples-for-kids.vigdorov.ru"'
- 'export IMAGE_TAG="${DRONE_COMMIT_SHA:0:7}"'
- 'export IMAGE_NAME="ci.vigdorov.ru/library/examples-for-kids-app"'
- 'export SECRET_NAME="prod-test-tls"'
# Создаем неймспейс
- 'kubectl create namespace $APP_NAMESPACE --dry-run=client -o yaml | kubectl apply -f -'
# Разворачиваем приложение
- 'sed -e "s|__IMAGE__|$IMAGE_NAME:$IMAGE_TAG|g" k8s/deployment.yaml | kubectl apply -n $APP_NAMESPACE -f -'
- 'kubectl apply -n $APP_NAMESPACE -f k8s/service.yaml'
- 'sed -e "s|__HOSTNAME__|$HOSTNAME|g" -e "s|__SECRET_NAME__|$SECRET_NAME|g" k8s/ingress.yaml | kubectl apply -n $APP_NAMESPACE -f -'
- 'echo "Deployed to PROD: https://$HOSTNAME"'