All checks were successful
		
		
	
	Build and Deploy / remote-build-and-deploy (push) Successful in 18m10s
				
			
		
			
				
	
	
		
			81 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| name: Build and Deploy
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     branches:
 | |
|       - main
 | |
| 
 | |
| jobs:
 | |
|   remote-build-and-deploy:
 | |
|     runs-on: ubuntu-latest
 | |
| 
 | |
|     steps:
 | |
|       - name: Run Entire CI/CD Process on Host via SSH
 | |
|         run: |
 | |
|           set -e
 | |
| 
 | |
|           # 1. Preparar el cliente SSH (sin cambios)
 | |
|           apt-get update > /dev/null && apt-get install -y openssh-client git > /dev/null
 | |
|           mkdir -p ~/.ssh
 | |
|           echo "${{ secrets.PROD_SERVER_SSH_KEY }}" > ~/.ssh/id_rsa
 | |
|           chmod 600 ~/.ssh/id_rsa
 | |
|           ssh-keyscan -H ${{ secrets.PROD_SERVER_HOST }} >> ~/.ssh/known_hosts
 | |
|           
 | |
|           # 2. Conectarse al HOST y ejecutar el script.
 | |
|           ssh ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }} << EOF
 | |
|             set -e
 | |
| 
 | |
|             # --- PARTE 1: PREPARACIÓN (EN EL HOST) ---
 | |
|             echo "--- (HOST) Preparing temporary workspace ---"
 | |
|             
 | |
|             # Gitea reemplazará estas variables ANTES de enviar el script.
 | |
|             TEMP_DIR="/tmp/gitea-build/${{ gitea.run_id }}"
 | |
|             REPO_NAME_RAW="${{ gitea.repository }}"
 | |
|             # El shell remoto ejecutará estos comandos. Escapamos los '$'.
 | |
|             REPO_NAME=\$(echo "\$REPO_NAME_RAW" | tr '[:upper:]' '[:lower:]')
 | |
|             GITEA_REPO_PATH="/var/lib/docker/volumes/gitea-stack_gitea-data/_data/git/repositories/\${REPO_NAME}.git"
 | |
|             
 | |
|             git config --global --add safe.directory "\$GITEA_REPO_PATH"
 | |
|             
 | |
|             echo "Cloning repository from local path: \$GITEA_REPO_PATH"
 | |
|             rm -rf \$TEMP_DIR
 | |
|             git clone \$GITEA_REPO_PATH \$TEMP_DIR
 | |
|             cd \$TEMP_DIR
 | |
|             git checkout "${{ gitea.sha }}"
 | |
|             
 | |
|             # --- PARTE 2: CONSTRUIR IMÁGENES CON KANIKO (EN EL HOST) ---
 | |
|             echo "--- (HOST) Building images... ---"
 | |
|             
 | |
|             docker run --rm -v "\$(pwd)":/workspace gcr.io/kaniko-project/executor:v1.9.0 \
 | |
|               --context=/workspace --dockerfile=/workspace/Backend/GestionIntegral.Api/Dockerfile --no-push \
 | |
|               --destination=\${REPO_NAME}-backend:latest --tarPath=/workspace/backend.tar
 | |
| 
 | |
|             docker run --rm -v "\$(pwd)":/workspace gcr.io/kaniko-project/executor:v1.9.0 \
 | |
|               --context=/workspace --dockerfile=/workspace/Frontend/Dockerfile --no-push \
 | |
|               --destination=\${REPO_NAME}-frontend:latest --tarPath=/workspace/frontend.tar
 | |
| 
 | |
|             # --- PARTE 3: DESPLEGAR (EN EL HOST) ---
 | |
|             echo "--- (HOST) Loading images and deploying... ---"
 | |
|             
 | |
|             docker load < backend.tar
 | |
|             docker load < frontend.tar
 | |
|             
 | |
|             cd /opt/gestion-integral
 | |
|             # Gitea reemplaza los secretos aquí. Es seguro.
 | |
|             export DB_SA_PASSWORD='${{ secrets.DB_SA_PASSWORD_SECRET }}'
 | |
|             # Detener explícitamente los servicios para forzar a que usen la nueva imagen al levantar.
 | |
|             echo "--- (HOST) Stopping old services... ---"
 | |
|             docker compose down
 | |
| 
 | |
|             # Levantar los servicios. Docker Compose usará las imágenes recién cargadas.
 | |
|             echo "--- (HOST) Starting new services... ---"
 | |
|             docker compose up -d
 | |
| 
 | |
|             # --- PARTE 4: LIMPIEZA (EN EL HOST) ---
 | |
|             echo "--- (HOST) Cleaning up... ---"
 | |
|             # Escapamos la variable para que la evalúe el host remoto
 | |
|             rm -rf \$TEMP_DIR
 | |
|             docker image prune -af
 | |
|             
 | |
|             echo "--- ¡¡DESPLIEGUE COMPLETADO Y VERIFICADO!! ---"
 | |
|           EOF |