# Pipeline Multi-Entorno - SACC v4 # ================================= Este pipeline de Bitbucket permite desplegar SACC v4 en dos entornos diferentes usando el mismo código base, cambiando solo las variables según la rama. ## Flujo de Trabajo por Ramas ``` ┌─────────────────────────────────────────────────────────────┐ │ RAMA 'test' / 'develop' │ │ → Despliegue AUTOMÁTICO a TEST │ │ → Cuenta AWS: 668889063715 │ │ → Variables: environments/test/terraform.tfvars │ │ → Workspace Terraform: test │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ RAMA 'main' / 'master' │ │ → Despliegue MANUAL a PRODUCCIÓN │ │ → Requiere aprobación en Bitbucket │ │ → Cuenta AWS: 523761210517 │ │ → Variables: environments/prod/terraform.tfvars │ │ → Workspace Terraform: prod │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ PULL REQUESTS │ │ → Solo validación (no despliegue) │ │ → Terraform validate + plan │ └─────────────────────────────────────────────────────────────┘ ``` ## Variables de Repositorio Requeridas Configurar estas variables en **Bitbucket > Repositorio > Settings > Repository variables**: ### Para TEST (Rama test/develop) | Variable | Descripción | |----------|-------------| | `TEST_AWS_ACCESS_KEY_ID` | Access Key cuenta 668889063715 | | `TEST_AWS_SECRET_ACCESS_KEY` | Secret Key cuenta 668889063715 | | `TEST_AWS_SESSION_TOKEN` | Session Token (si aplica) | ### Para PROD (Rama main/master) | Variable | Descripción | |----------|-------------| | `PROD_AWS_ACCESS_KEY_ID` | Access Key cuenta 523761210517 | | `PROD_AWS_SECRET_ACCESS_KEY` | Secret Key cuenta 523761210517 | | `PROD_AWS_SESSION_TOKEN` | Session Token (si aplica) | ### Opcionales (Notificaciones) | Variable | Descripción | |----------|-------------| | `TELEGRAM_BOT_TOKEN` | Token del bot de Telegram | | `TELEGRAM_CHAT_ID` | ID del chat para notificaciones | ## Estructura de Archivos ``` iac-duplicate/ ├── terraform/ │ ├── main.tf # Código base (igual para ambos) │ ├── variables.tf # Variables definidas │ ├── environments/ │ │ ├── test/ │ │ │ └── terraform.tfvars # Valores TEST │ │ └── prod/ │ │ └── terraform.tfvars # Valores PROD │ └── modules/ # Módulos reutilizables ├── ansible/ │ └── playbooks/ │ └── site.yml # Configuración post-deploy └── bitbucket/ └── bitbucket-pipelines.yml # Este pipeline ``` ## Cómo Desplegar ### A TEST (Automático) ```bash # 1. Hacer cambios en la rama test git checkout test git add . git commit -m "feat: nueva funcionalidad" git push origin test # 2. Bitbucket despliega automáticamente # - Terraform Apply a cuenta 668889063715 # - Ansible configura el servidor # - Health checks automáticos ``` ### A PRODUCCIÓN (Manual) ```bash # 1. Crear PR de test → main # 2. Revisar y aprobar PR # 3. Merge a main # 4. En Bitbucket, ir a Pipelines # 5. Ver pipeline de la rama main # 6. Clic en "Run" para aprobar el despliegue a PROD # 7. Esperar validación manual ``` ## Workspaces Terraform El pipeline usa workspaces de Terraform para aislar estados: ```bash # TEST cd terraform terraform workspace select test terraform plan -var-file="environments/test/terraform.tfvars" # PROD cd terraform terraform workspace select prod terraform plan -var-file="environments/prod/terraform.tfvars" ``` ## Custom Pipelines ### Destruir entorno TEST ```bash # En Bitbucket > Pipelines > Run pipeline # Seleccionar "destroy-test" # ⚠️ Esto elimina TODO el entorno de test ``` ## Seguridad - ✅ PROD requiere aprobación manual (trigger: manual) - ✅ TEST se destruye automáticamente (scheduling) - ✅ Variables separadas por entorno - ✅ Workspaces aislados en Terraform - ✅ Health checks en todos los puertos (8080-8085) ## Troubleshooting | Problema | Solución | |----------|----------| | "Access Denied" en PROD | Verificar credenciales PROD_AWS_* | | "Workspace not found" | Ejecutar `terraform workspace new test/prod` | | "Port 808X failed" | Verificar que los JAR estén desplegados en EC2 | | "Nginx not responding" | Revisar `systemctl status nginx` en EC2 | ## Notas - El pipeline usa la misma imagen Docker `ccsoft/ccsoft-pipeline:latest` - Terraform workspaces evitan conflicto de estados - Los artifacts se pasan entre steps automáticamente - Las notificaciones Telegram son opcionales