diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 51a7c2f..10ccd9d 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -10,7 +10,6 @@ on: jobs: build-and-deploy: runs-on: ubuntu-latest - # Используем контейнер act-latest для стабильной работы на твоем раннере container: image: catthehacker/ubuntu:act-latest @@ -20,62 +19,51 @@ jobs: - name: Install Docker CLI run: | - # Установка Docker внутри контейнера раннера apt-get update && apt-get install -y docker.io - name: Build and Deploy run: | - # 1. ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ - # Разделяем среды, сохраняя единство инженерного подхода. - BRANCH_NAME="${{ github.ref }}" - - if [[ "$BRANCH_NAME" == *"production"* ]]; then - NAME="jambotron-prod" - DB_NAME="jambotron_prod" - DOMAIN="jambotron.com" - TAG="prod-latest" + # 1. Четкое определение переменных окружения + if [[ "${{ github.ref }}" == *"production"* ]]; then + export DEPLOY_NAME="jambotron-prod" + export DEPLOY_DB="jambotron_prod" + export DEPLOY_DOMAIN="jambotron.com" + export DEPLOY_TAG="prod-latest" else - NAME="jambotron-staging" - DB_NAME="jambotron_stg" - DOMAIN="staging.jambotron.com" - TAG="stg-latest" + export DEPLOY_NAME="jambotron-staging" + export DEPLOY_DB="jambotron_stg" + export DEPLOY_DOMAIN="staging.jambotron.com" + export DEPLOY_TAG="stg-latest" fi - echo "Starting созидание for $NAME with tag $TAG" + echo "Starting созидание for $DEPLOY_NAME with tag $DEPLOY_TAG" - # 2. СБОРКА ОБРАЗА - # Используем --network=host, чтобы избежать ошибок npm network - docker build --network=host -t jambotron-app:${TAG} . + # 2. Сборка образа с сетью хоста + docker build --network=host -t jambotron-app:${DEPLOY_TAG} . - # 3. БЕЗОПАСНАЯ ОЧИСТКА - # Проверяем наличие контейнера перед остановкой, чтобы не ломать билд - if [ "$(docker ps -aq -f name=^/${NAME}$)" ]; then - echo "Stopping and removing existing container: $NAME" - docker stop $NAME - docker rm $NAME + # 3. Безопасная очистка (проверка существования перед удалением) + if [ "$(docker ps -aq -f name=^/${DEPLOY_NAME}$)" ]; then + echo "Cleaning up old container: $DEPLOY_NAME" + docker stop $DEPLOY_NAME || true + docker rm $DEPLOY_NAME || true fi - # 4. ЗАПУСК СИСТЕМЫ - # Формируем полное имя образа заранее для защиты от пустых аргументов - IMAGE_NAME="jambotron-app:${TAG}" - + # 4. ЗАПУСК (используем полные переменные и кавычки для защиты от пустых строк) + # Ошибка 'requires at least 1 argument' лечится гарантированным наличием имени образа в конце docker run -d \ - --name "$NAME" \ + --name "$DEPLOY_NAME" \ --network jambotron-net \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ - # Активирует боевой режим (оптимизация, безопасность, логирование) -e SPRING_PROFILES_ACTIVE=prod \ - -e SPRING_DATASOURCE_URL=jdbc:postgresql://jambo-postgres:5432/$DB_NAME \ + -e SPRING_DATASOURCE_URL=jdbc:postgresql://jambo-postgres:5432/$DEPLOY_DB \ -e SPRING_DATASOURCE_USERNAME=jambotron_admin \ -e SPRING_DATASOURCE_PASSWORD=jambo_secret_pass \ - # Настройки Flyway для миграции базы - -e SPRING_FLYWAY_URL=jdbc:postgresql://jambo-postgres:5432/$DB_NAME \ + -e SPRING_FLYWAY_URL=jdbc:postgresql://jambo-postgres:5432/$DEPLOY_DB \ -e SPRING_FLYWAY_USER=jambotron_admin \ -e SPRING_FLYWAY_PASSWORD=jambo_secret_pass \ - # Метки для Caddy (автоматический прокси и SSL) - -l "caddy=$DOMAIN" \ + -l "caddy=$DEPLOY_DOMAIN" \ -l 'caddy.reverse_proxy={{upstreams 8081}}' \ - "$IMAGE_NAME" + "jambotron-app:${DEPLOY_TAG}" - echo "Созидание $NAME успешно завершено." \ No newline at end of file + echo "Созидание $DEPLOY_NAME успешно завершено." \ No newline at end of file