Add complete SACC v4 infrastructure project
- 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
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user