name: Deploy to Test on: push: branches: [dev] jobs: deploy: runs-on: ubuntu-22.04 timeout-minutes: 20 # 延长超时时间[1](@ref) steps: - name: Checkout code uses: actions/checkout@v4 with: # 指定分支、标签或提交哈希 ref: dev # 拉取深度(节省时间与带宽) fetch-depth: 0 # 0 表示拉取完整的历史 - name: Replace Debian APT sources run: | tee /etc/apt/sources.list < $SSH_DIR/id_rsa whoami echo "$SSH_PRIVATE_KEY" chmod 700 $SSH_DIR chmod 600 $SSH_DIR/id_rsa ssh-keyscan 43.142.97.39 >> $SSH_DIR/known_hosts - name: Sync code run: | rsync -avz --delete --exclude=".env" \ -e "ssh -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa" \ --rsync-path="mkdir -p /data/laravel_test && rsync" \ ./ deploy-user@43.142.97.39:/data/laravel_test/ - name: Deploy containers run: | ssh -i /root/.ssh/id_rsa deploy-user@43.142.97.39 /bin/bash << 'EOF' COMPOSE_PROJECT="laravel_test" echo "DEBUG - COMPOSE_PROJECT=${COMPOSE_PROJECT}" # 确认变量值 cd /data/laravel_test # 使用docker-compose插件模式 /usr/bin/docker compose -p "${COMPOSE_PROJECT}" down --volumes || true /usr/bin/docker compose -p "${COMPOSE_PROJECT}" up -d --build # 等待 PHP 容器健康状态 while [ $(docker inspect --format "{{.State.Health.Status}}" ${COMPOSE_PROJECT}-php-1) != "healthy" ]; do echo "等待 PHP 容器就绪..." sleep 5 done docker exec "${COMPOSE_PROJECT}-php-1" composer install --no-dev --optimize-autoloader docker exec "${COMPOSE_PROJECT}-php-1" php artisan key:generate docker exec "${COMPOSE_PROJECT}-php-1" php artisan config:cache docker exec "${COMPOSE_PROJECT}-nginx-1" nginx -s reload EOF