Procedimiento — Agregar un repo¶
Procedimiento de rutina: se repite cada vez que la org symintel necesita
un repo nuevo. Lo crea el pipeline de OpenTofu del repo
symintel/infra; tú agregas la
entrada en el mapa de repos y, si el proyecto despliega a cPanel por FTP (File Transfer Protocol),
sus credenciales en 1Password.
Antes de empezar
- La plataforma base ya funciona: Fase 4 — 4.11
completada (el pipeline
tofudeinfracorre en verde). - La app de 1Password desbloqueada y
ONEPASSWORD_ACCOUNT_NAMEcon el nombre de tu cuenta (detalle).
1. Define el repo¶
| Dato | Ejemplo | Para qué |
|---|---|---|
| Nombre | web-clientes |
Nombre del repo en symintel |
| Descripción | Sitio de clientes |
Descripción en GitHub |
| Stack | node o php |
Qué workflow de CI de core-pipelines usa |
| ¿Despliega por FTP a cPanel? | sí / no | Si es sí, crea los environments dev y prod con sus credenciales |
2. Solo si despliega: credenciales FTP en 1Password¶
Crea el item ftp-<repo> (por ejemplo ftp-web-clientes) en la bóveda
HomeLab, tipo Nota segura, con estos 8 campos
(cómo crear un item):
| Campo | Tipo | Ejemplo |
|---|---|---|
dev_host |
Texto | dev.tu-cpanel.example.com |
dev_user |
Texto | usuario_dev |
dev_password |
Contraseña | |
dev_remote_dir |
Texto | /home/usuario/dev.symintel.example.com |
prod_host |
Texto | tu-cpanel.example.com |
prod_user |
Texto | usuario_prod |
prod_password |
Contraseña | |
prod_remote_dir |
Texto | /home/usuario/public_html |
Comprueba que se lee bien y llévalo al clúster, desde la raíz de homelab.
El runner de OpenTofu recibe estas credenciales como TF_VAR_ftp desde el
clúster, así que este paso va antes del PR (pull request): si no, el
pipeline falla por falta de credenciales.
export ONEPASSWORD_ACCOUNT_NAME="MCO Family" # tu cuenta
.venv/bin/python ansible/scripts/apply_platform_secrets.py --check
cd ansible
ansible-playbook -i inventory.ini playbook-platform-secrets.yml
--check tiene que mostrar el item ftp-<repo> con sus 8 campos en ✓.
3. Agrega el repo al mapa (PR en infra)¶
En el repo infra, agrega una entrada a local.repos en
github/repos.tf:
locals {
repos = {
# ... repos existentes ...
web-clientes = {
description = "Sitio de clientes"
stack = "node" # node | php
deploy = true # false si no despliega por FTP
required_status_check = "ci-cd" # quitar si el repo no tiene CI
}
}
}
Campos opcionales: ftp_protocol (ftp, ftps o sftp; por defecto
ftps) y visibility (private o internal; por defecto private).
Abre un PR en infra: el pipeline tofu muestra el plan con lo que va a
crear. Revísalo y mergea; al llegar a main, el pipeline hace el apply.
4. Sube el código¶
El repo nace con un README (auto_init). Para subir un proyecto que ya
tienes en tu máquina:
cd <carpeta-del-proyecto>
git init -b main # si todavía no es un repo git
git add -A && git commit -m "Primer commit"
git remote add origin https://github.com/symintel/<repo>.git
git pull origin main --allow-unrelated-histories
git push -u origin main # como owner de la org puedes pushear directo a main
5. Solo si tiene CI/CD: el workflow¶
Crea .github/workflows/ci-cd.yml en el repo nuevo llamando a los workflows
de core-pipelines (mismo esquema que el repo api). Para un proyecto Node
que despliega (develop → dev, main → prod):
name: CI/CD
on:
push:
branches: [develop, main]
pull_request:
branches: [main]
jobs:
ci:
uses: symintel/core-pipelines/.github/workflows/ci-node.yml@main
secrets: inherit
deploy-dev:
needs: ci
if: github.ref == 'refs/heads/develop' && github.event_name == 'push'
uses: symintel/core-pipelines/.github/workflows/deploy-ftp.yml@main
with:
stack: node
environment: dev
secrets: inherit
deploy-prod:
needs: ci
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
uses: symintel/core-pipelines/.github/workflows/deploy-ftp.yml@main
with:
stack: node
environment: prod
secrets: inherit
Para PHP usa ci-php.yml y stack: php. El nombre del job (ci-cd) es el
check que exige la protección de main si pusiste
required_status_check = "ci-cd". Cuando core-pipelines pase a usar el tag
v1, cambia @main por @v1 (versionado).
6. Verifica¶
En GitHub, en el repo nuevo:
- Settings → Environments: existen
devyprod(solo si despliega). - En cada environment, los secrets
FTP_HOST,FTP_USER,FTP_PASSWORDyFTP_REMOTE_DIR, y las variablesPROJECT_STACKyFTP_PROTOCOL. - Settings → Branches:
mainprotegida. - Actions: el primer push corre el workflow en el runner
arc-runners.
Si falla¶
| Síntoma | Revisar |
|---|---|
El plan de infra falla con deploy = true requiere credenciales ftp |
Falta el item ftp-<repo> o no re-corriste playbook-platform-secrets.yml (paso 2) |
--check marca campos con ✗ |
Nombres exactos de los 8 campos, sin sección (detalle) |
El git push a main es rechazado |
Solo los owners de la org pueden saltarse la protección de main; si no, sube el código por PR |
| El deploy falla al conectar | Datos del item ftp-<repo> y ftp_protocol en repos.tf; tras corregir el item, repite el paso 2 y relanza el pipeline de infra |