kind: pipeline type: docker name: Build y Deploy volumes: - name: dockersock host: path: /var/run/docker.sock trigger: branch: - main event: - push steps: - name: build-and-publish-backend image: docker:latest # Usamos la imagen oficial de Docker CLI volumes: - name: dockersock path: /var/run/docker.sock environment: # Pasamos las credenciales de forma segura como variables de entorno GITEA_USER: from_secret: GITEA_USER ACTIONS_PAT: from_secret: ACTIONS_PAT REGISTRY_URL: from_secret: REGISTRY_URL commands: # 1. Iniciar sesión en el registro de Gitea - echo "Iniciando sesión en ${REGISTRY_URL}..." - docker login -u $GITEA_USER -p $ACTIONS_PAT $REGISTRY_URL # 2. Definir los tags para la imagen - export TAG_LATEST="${REGISTRY_URL}/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME,,}-backend:latest" - export TAG_COMMIT="${REGISTRY_URL}/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME,,}-backend:${DRONE_COMMIT_SHA:0:8}" - echo "Creando imagen con tags: ${TAG_LATEST} y ${TAG_COMMIT}" # 3. Construir la imagen de Docker - docker build -t $TAG_LATEST -t $TAG_COMMIT -f Backend/GestionIntegral.Api/Dockerfile . # 4. Subir ambos tags al registro - docker push $TAG_LATEST - docker push $TAG_COMMIT - name: build-and-publish-frontend image: docker:latest volumes: - name: dockersock path: /var/run/docker.sock environment: GITEA_USER: from_secret: GITEA_USER ACTIONS_PAT: from_secret: ACTIONS_PAT REGISTRY_URL: from_secret: REGISTRY_URL commands: - docker login -u $GITEA_USER -p $ACTIONS_PAT $REGISTRY_URL - export TAG_LATEST="${REGISTRY_URL}/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME,,}-frontend:latest" - export TAG_COMMIT="${REGISTRY_URL}/${DRONE_REPO_OWNER}/${DRONE_REPO_NAME,,}-frontend:${DRONE_COMMIT_SHA:0:8}" - docker build -t $TAG_LATEST -t $TAG_COMMIT -f Frontend/Dockerfile . - docker push $TAG_LATEST - docker push $TAG_COMMIT depends_on: - build-and-publish-backend - name: deploy-to-production # Este paso ya estaba bien y no necesita cambios image: alpine:latest environment: SSH_KEY: from_secret: PROD_SERVER_SSH_KEY PROD_HOST: from_secret: PROD_SERVER_HOST PROD_USER: from_secret: PROD_SERVER_USER DB_PASSWORD: from_secret: DB_SA_PASSWORD_SECRET JWT_KEY: from_secret: JWT_KEY_SECRET REGISTRY: from_secret: REGISTRY_URL GITEA_USER: from_secret: GITEA_USER GITEA_PAT: from_secret: ACTIONS_PAT commands: - apk add --no-cache openssh-client - mkdir -p ~/.ssh - echo "$SSH_KEY" > ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - ssh-keyscan -H $PROD_HOST >> ~/.ssh/known_hosts - | ssh $PROD_USER@$PROD_HOST << 'EOF' echo "--- CONECTADO AL SERVIDOR DE PRODUCCIÓN ---" cd /opt/gestion-integral export DB_SA_PASSWORD="${DB_PASSWORD}" export JWT_KEY="${JWT_KEY}" docker login ${REGISTRY} -u ${GITEA_USER} -p ${GITEA_PAT} docker compose pull docker compose up -d docker image prune -af echo "--- DESPLIEGUE COMPLETADO ---" EOF depends_on: - build-and-publish-frontend