Compare commits
	
		
			28 Commits
		
	
	
		
			Suscripcio
			...
			f4664808f7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f4664808f7 | |||
| e03359ffbd | |||
| 34dea2b413 | |||
| 935aac16e1 | |||
| 93f36c7dee | |||
| 85b9dbadde | |||
| b3ed6f6c21 | |||
| 45c8742906 | |||
| 3ef3bc8949 | |||
| bf42b30cb0 | |||
| 0ab95b2ead | |||
| e5288b4723 | |||
| a5451a193e | |||
| 9356f94047 | |||
| 322d3f77de | |||
| ae6a91b9a7 | |||
| 4acf92838b | |||
| c0c151ff8e | |||
| 761b10a63e | |||
| 3d6cad5f5a | |||
| d94fd9d8cd | |||
| b78475e8ed | |||
| 226b1667c2 | |||
| 1976526c7f | |||
| f082b2dd01 | |||
| 4e445107f2 | |||
| 631a094c8c | |||
| 98c2593bf0 | 
| @@ -13,64 +13,81 @@ jobs: | ||||
|       - name: Checkout code | ||||
|         uses: actions/checkout@v3 | ||||
|  | ||||
|       # --- Instalar Docker en el Entorno del Job --- | ||||
|       - name: Install Docker CLI | ||||
|       - name: Build Backend Image and Extract | ||||
|         run: | | ||||
|           apt-get update | ||||
|           apt-get install -y --no-install-recommends ca-certificates curl | ||||
|           install -m 0755 -d /etc/apt/keyrings | ||||
|           curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc | ||||
|           chmod a+r /etc/apt/keyrings/docker.asc | ||||
|           echo \ | ||||
|             "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ | ||||
|             $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ | ||||
|             tee /etc/apt/sources.list.d/docker.list > /dev/null | ||||
|           apt-get update | ||||
|           apt-get install -y docker-ce-cli | ||||
|           echo "Building backend image..." | ||||
|           # 1. Ejecutamos Kaniko y le damos un nombre, SIN --rm | ||||
|           docker run --name kaniko-backend \ | ||||
|             -v ${{ gitea.workspace }}:/workspace \ | ||||
|             gcr.io/kaniko-project/executor:v1.9.0 \ | ||||
|             --context=/workspace \ | ||||
|             --dockerfile=/workspace/Backend/GestionIntegral.Api/Dockerfile \ | ||||
|             --no-push \ | ||||
|             --destination=${{ gitea.actor }}/${{ toLower(gitea.repository_name) }}-backend:latest \ | ||||
|             --tarPath=/kaniko/backend.tar # Guardamos en una ruta interna de Kaniko | ||||
|  | ||||
|       - name: Login to Gitea Container Registry | ||||
|         uses: docker/login-action@v2 | ||||
|         with: | ||||
|           registry: ${{ secrets.REGISTRY_URL }} | ||||
|           username: ${{ secrets.REGISTRY_USER }} | ||||
|           password: ${{ secrets.ACTIONS_PAT }} | ||||
|           echo "Extracting backend image..." | ||||
|           # 2. Copiamos el archivo desde el contenedor de Kaniko al workspace del job | ||||
|           docker cp kaniko-backend:/kaniko/backend.tar ${{ gitea.workspace }}/backend.tar | ||||
|            | ||||
|           echo "Cleaning up backend builder..." | ||||
|           # 3. Eliminamos el contenedor de Kaniko | ||||
|           docker rm kaniko-backend | ||||
|  | ||||
|       - name: Build and Push Backend Image | ||||
|         uses: docker/build-push-action@v4 | ||||
|         with: | ||||
|           context: . | ||||
|           file: Backend/GestionIntegral.Api/Dockerfile | ||||
|           push: true | ||||
|           tags: ${{ secrets.REGISTRY_URL }}/${{ gitea.actor }}/${{ toLower(gitea.repository_name) }}-backend:latest,${{ secrets.REGISTRY_URL }}/${{ gitea.actor }}/${{ toLower(gitea.repository_name) }}-backend:${{ gitea.sha_short }} | ||||
|  | ||||
|       - name: Build and Push Frontend Image | ||||
|         uses: docker/build-push-action@v4 | ||||
|         with: | ||||
|           context: . | ||||
|           file: Frontend/Dockerfile | ||||
|           push: true | ||||
|           tags: ${{ secrets.REGISTRY_URL }}/${{ gitea.actor }}/${{ toLower(gitea.repository_name) }}-frontend:latest,${{ secrets.REGISTRY_URL }}/${{ gitea.actor }}/${{ toLower(gitea.repository_name) }}-frontend:${{ gitea.sha_short }} | ||||
|  | ||||
|       - name: Deploy to Production | ||||
|       - name: Build Frontend Image and Extract | ||||
|         run: | | ||||
|           echo "Deploying to production server..." | ||||
|           # Ya no necesitamos instalar openssh-client, porque la imagen base ya lo tiene. | ||||
|           echo "Building frontend image..." | ||||
|           docker run --name kaniko-frontend \ | ||||
|             -v ${{ gitea.workspace }}:/workspace \ | ||||
|             gcr.io/kaniko-project/executor:v1.9.0 \ | ||||
|             --context=/workspace \ | ||||
|             --dockerfile=/workspace/Frontend/Dockerfile \ | ||||
|             --no-push \ | ||||
|             --destination=${{ gitea.actor }}/${{ toLower(gitea.repository_name) }}-frontend:latest \ | ||||
|             --tarPath=/kaniko/frontend.tar | ||||
|  | ||||
|           echo "Extracting frontend image..." | ||||
|           docker cp kaniko-frontend:/kaniko/frontend.tar ${{ gitea.workspace }}/frontend.tar | ||||
|            | ||||
|           echo "Cleaning up frontend builder..." | ||||
|           docker rm kaniko-frontend | ||||
|        | ||||
|       - name: Verify Artifacts | ||||
|         run: | | ||||
|           echo "--- Verifying contents of workspace ---" | ||||
|           ls -l ${{ gitea.workspace }} | ||||
|  | ||||
|       - name: Deploy to Production via SCP and SSH | ||||
|         run: | | ||||
|           set -e | ||||
|           echo "Preparing SSH client..." | ||||
|           apt-get update && apt-get install -y openssh-client | ||||
|           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 | ||||
|            | ||||
|           echo "Copying image files to production server..." | ||||
|           scp ${{ gitea.workspace }}/backend.tar ${{ gitea.workspace }}/frontend.tar ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }}:/opt/gestion-integral/ | ||||
|  | ||||
|           echo "Connecting to host to load images and deploy..." | ||||
|           ssh ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }} << 'EOF' | ||||
|             set -e | ||||
|             echo "--- CONECTADO AL SERVIDOR DE PRODUCCIÓN ---" | ||||
|             cd /opt/gestion-integral | ||||
|              | ||||
|             echo "Loading images into Docker..." | ||||
|             docker load < backend.tar | ||||
|             docker load < frontend.tar | ||||
|              | ||||
|             echo "Starting application stack..." | ||||
|             export DB_SA_PASSWORD="${{ secrets.DB_SA_PASSWORD_SECRET }}" | ||||
|             export JWT_KEY="${{ secrets.JWT_KEY_SECRET }}" | ||||
|              | ||||
|             docker login ${{ secrets.REGISTRY_URL }} -u ${{ secrets.REGISTRY_USER }} -p ${{ secrets.ACTIONS_PAT }} | ||||
|             docker compose pull | ||||
|             docker compose up -d | ||||
|  | ||||
|             echo "Cleaning up tar files and old images..." | ||||
|             rm backend.tar frontend.tar | ||||
|             docker image prune -af | ||||
|              | ||||
|             echo "--- DESPLIEGUE COMPLETADO ---" | ||||
|             echo "--- ¡¡DESPLIEGUE COMPLETADO Y VERIFICADO!! ---" | ||||
|           EOF | ||||
		Reference in New Issue
	
	Block a user