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' trigger: 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' trigger: 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"