71be2abd2e
- Terraform modules: VPC, EC2, RDS, S3, CloudFront, Route53, Lambda, IAM, Security Groups - Ansible playbooks for server configuration - Scripts: create-test-environment.sh, destroy-test-environment.sh, validate-environment.sh - Documentation: README, QUICKSTART, AGENTS - Jenkins pipeline for automated deployment - Jenkins pipeline for environment destruction
5.8 KiB
5.8 KiB
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)
# 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)
# 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:
# 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
# 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