99 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
		
		
			
		
	
	
			99 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
|  | # .drone.yml
 | ||
|  | kind: pipeline
 | ||
|  | type: docker
 | ||
|  | name: Build y Deploy
 | ||
|  | 
 | ||
|  | # --- DISPARADOR (TRIGGER) ---
 | ||
|  | # Este pipeline se ejecutará solo cuando hagas push a la rama 'main'
 | ||
|  | trigger:
 | ||
|  |   branch:
 | ||
|  |   - main
 | ||
|  |   event:
 | ||
|  |   - push
 | ||
|  | 
 | ||
|  | # --- PASOS DEL PIPELINE ---
 | ||
|  | steps:
 | ||
|  | 
 | ||
|  | # --- PASO 1: CONSTRUIR LA IMAGEN DEL BACKEND ---
 | ||
|  | - name: build-and-publish-backend
 | ||
|  |   image: plugins/docker
 | ||
|  |   settings:
 | ||
|  |     # --- Configuración del Registro ---
 | ||
|  |     # Usamos el registro de Gitea. El valor viene de los secretos de Drone.
 | ||
|  |     registry:
 | ||
|  |       from_secret: REGISTRY_URL
 | ||
|  |     # Drone inyecta automáticamente un secreto para autenticarse en el registro.
 | ||
|  |     # Usaremos un PAT (Token de Acceso Personal) de Gitea.
 | ||
|  |     username:
 | ||
|  |       from_secret: GITEA_USER 
 | ||
|  |     password:
 | ||
|  |       from_secret: ACTIONS_PAT
 | ||
|  |     
 | ||
|  |     # --- Configuración de la Imagen ---
 | ||
|  |     # El nombre de la imagen en el registro.
 | ||
|  |     repo: ${{DRONE_REPO_OWNER}}/${{DRONE_REPO_NAME}}-backend
 | ||
|  |     # El Dockerfile a usar.
 | ||
|  |     dockerfile: Backend/GestionIntegral.Api/Dockerfile
 | ||
|  |     # Las etiquetas que le pondremos a la imagen.
 | ||
|  |     tags:
 | ||
|  |       - latest
 | ||
|  |       - ${{DRONE_COMMIT_SHA:0:8}} # Etiqueta con el hash corto del commit
 | ||
|  | 
 | ||
|  | # --- PASO 2: CONSTRUIR LA IMAGEN DEL FRONTEND ---
 | ||
|  | - name: build-and-publish-frontend
 | ||
|  |   image: plugins/docker
 | ||
|  |   settings:
 | ||
|  |     # La configuración del registro es la misma
 | ||
|  |     registry:
 | ||
|  |       from_secret: REGISTRY_URL
 | ||
|  |     username:
 | ||
|  |       from_secret: GITEA_USER
 | ||
|  |     password:
 | ||
|  |       from_secret: ACTIONS_PAT
 | ||
|  | 
 | ||
|  |     # --- Configuración de la Imagen ---
 | ||
|  |     repo: ${{DRONE_REPO_OWNER}}/${{DRONE_REPO_NAME}}-frontend
 | ||
|  |     dockerfile: Frontend/Dockerfile
 | ||
|  |     # Las etiquetas para la imagen del frontend.
 | ||
|  |     tags:
 | ||
|  |       - latest
 | ||
|  |       - ${{DRONE_COMMIT_SHA:0:8}}
 | ||
|  |   # Este paso depende del anterior para no ejecutarse en paralelo
 | ||
|  |   depends_on:
 | ||
|  |     - build-and-publish-backend
 | ||
|  | 
 | ||
|  | # --- PASO 3: DESPLEGAR LA APLICACIÓN ---
 | ||
|  | - name: deploy-to-production
 | ||
|  |   image: appleboy/drone-ssh
 | ||
|  |   settings:
 | ||
|  |     host:
 | ||
|  |       from_secret: PROD_SERVER_HOST
 | ||
|  |     username:
 | ||
|  |       from_secret: PROD_SERVER_USER
 | ||
|  |     key:
 | ||
|  |       from_secret: PROD_SERVER_SSH_KEY
 | ||
|  |     
 | ||
|  |     # --- Comandos a ejecutar en el servidor de producción ---
 | ||
|  |     script:
 | ||
|  |       # Navegamos a la carpeta donde está el docker-compose.yml de la aplicación
 | ||
|  |       - cd /opt/gestion-integral
 | ||
|  |       
 | ||
|  |       # Exportamos los secretos que necesita el docker-compose.yml
 | ||
|  |       - export DB_SA_PASSWORD=$${DB_SA_PASSWORD_SECRET} # Nota los $$ para escapar
 | ||
|  |       - export JWT_KEY=$${JWT_KEY_SECRET}
 | ||
|  | 
 | ||
|  |       # Login al registro de Gitea DENTRO del servidor de producción
 | ||
|  |       - docker login $${REGISTRY_URL_SECRET} -u $${GITEA_USER_SECRET} -p $${ACTIONS_PAT_SECRET}
 | ||
|  | 
 | ||
|  |       # Descargamos las nuevas versiones de las imágenes
 | ||
|  |       - docker compose pull
 | ||
|  |       
 | ||
|  |       # Levantamos el stack con los cambios
 | ||
|  |       - docker compose up -d
 | ||
|  |       
 | ||
|  |       # Limpiamos imágenes viejas que ya no se usan
 | ||
|  |       - docker image prune -af
 | ||
|  |   
 | ||
|  |   # Este paso depende de que las dos imágenes se hayan construido
 | ||
|  |   depends_on:
 | ||
|  |     - build-and-publish-frontend
 |