clase:daw:daw-proyecto:tema07
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| clase:daw:daw-proyecto:tema07 [2026/10/14 13:10] – «Fábrica» pasa a «arnés» / ingeniería de arneses (harness engineering, dicho en el tema 1); el día de trabajo en impersonal, sin Lorenzo; ejemplos con <alumno> claude | clase:daw:daw-proyecto:tema07 [2026/10/14 14:08] (actual) – Tema nuevo «2. IA y agentes»: los temas 2 a 7 pasan a ser 3 a 8, con sus referencias cruzadas renumeradas claude | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== 7. Resumen | + | ====== 7. Despliegue en el proyecto |
| - | El arnés está montado. Esta página es la que se tiene abierta mientras se trabaja | + | Objetivo del tema: ''/ |
| - | ===== El flujo, en pasos ===== | + | Lo que ya sabéis: qué es GitHub Actions y un primer workflow con VPN y SSH, en [[clase: |
| - | **Por cada issue** (varios a la vez, cada uno en su worktree). Cada fase, en una conversación nueva: | + | ===== El servidor ===== |
| - | - **Start.** Crearlo en GitHub y ponerlo en el tablero. ''/ | + | Un VPS compartido por toda la clase, con tres cosas montadas por el profesor: |
| - | - **Specification.** Si es un CRUD, ''/ | + | |
| - | - **Implementation.** ''/ | + | |
| - | - **Testing.** ''/ | + | |
| - | - **Review & Finish.** ''/ | + | |
| - | **Cuando hay algo que sacar:** | + | |
| + | * **nginx-proxy** en la red '' | ||
| + | | ||
| - | - **Publish.** | + | < |
| - | ===== La gramática | + | ===== Los mismos scripts |
| - | Siempre | + | En el servidor no hay nada nuevo que aprender: la aplicación se opera con el **mismo script** del tema 4, '' |
| - | ^ Familia ^ Subcomando ^ Qué hace ^ | + | <sxh bash> |
| - | | ''/ | + | COMPOSE_FILE=compose.yaml |
| - | | | '' | + | </sxh> |
| - | | | '' | + | |
| - | | | '' | + | |
| - | | | '' | + | |
| - | | '' | + | |
| - | | | '' | + | |
| - | | | '' | + | |
| - | | | '' | + | |
| - | | ''/ | + | |
| - | | | '' | + | |
| - | | ''/ | + | |
| - | | | '' | + | |
| - | | | '' | + | |
| - | | ''/ | + | |
| - | | | '' | + | |
| - | Fuera de la gramática, por ser de cc-sdd y usarse una vez: '' | + | * Con '' |
| + | * '' | ||
| + | * Los workflows solo llaman a '' | ||
| - | ===== Los comandos de tests, sin skill ===== | + | ===== Secretos |
| - | Son los que ejecutan | + | La contraseña de la base de datos de producción no está en ningún fichero: está en //Settings → Secrets and variables → Actions// del repositorio como '' |
| - | ^ Comando ^ Dónde ^ Qué pasa ^ | + | ===== Los workflows ===== |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | ===== Listo para la 2ª evaluación ===== | + | Un solo fichero |
| - | Antes de empezar el proyecto, todo esto tiene que estar hecho y comprobado: | + | <sxh yaml;title:.github/ |
| + | name: CI/CD | ||
| - | * Tablero creado | + | on: |
| - | * Dos worktrees con la aplicación levantada a la vez, cada uno con sus datos. | + | push: |
| - | * Dos CRUD hechos con '' | + | branches: [develop, main] |
| - | * Steering de cc-sdd | + | workflow_dispatch: |
| - | * Tests ArchUnit | + | |
| - | * Tests de API y E2E generados pasando en '' | + | jobs: |
| - | * '' | + | ci: |
| - | * ''/ | + | runs-on: ubuntu-latest |
| - | * CI en verde en '' | + | steps: |
| - | * Una publicación | + | - uses: actions/ |
| - | * '' | + | - uses: actions/ |
| + | with: { distribution: | ||
| + | - uses: actions/ | ||
| + | with: { node-version: | ||
| + | |||
| + | - name: Levantar la aplicación | ||
| + | env: { DB_PASSWORD: | ||
| + | run: | | ||
| + | docker network create nginx-proxy-network | ||
| + | docker compose up -d --build --wait | ||
| + | |||
| + | - name: Tests del backend (unitarios | ||
| + | working-directory: | ||
| + | run: mvn -B test | ||
| + | |||
| + | - name: Tests de API y E2E | ||
| + | working-directory: | ||
| + | run: | | ||
| + | npm ci | ||
| + | npx playwright install --with-deps chromium | ||
| + | npm run test:api | ||
| + | npm run test:e2e | ||
| + | |||
| + | deploy: | ||
| + | needs: ci | ||
| + | if: github.ref == 'refs/ | ||
| + | runs-on: self-hosted | ||
| + | steps: | ||
| + | - uses: actions/ | ||
| + | - name: Desplegar | ||
| + | env: | ||
| + | COMPOSE_FILE: | ||
| + | | ||
| + | run: ./app.sh start | ||
| + | - name: Smoke test | ||
| + | run: curl -fsS http://< | ||
| + | </ | ||
| + | |||
| + | Lo que hay que entender: | ||
| + | |||
| + | * **'' | ||
| + | | ||
| + | * **El smoke test** es el último paso: una petición a la URL de producción que tiene que responder 200. Si el despliegue ha dejado la aplicación caída, el workflow sale en rojo y se ve en el acto. | ||
| + | * '' | ||
| + | |||
| + | Y dos workflows pequeños de operación, '' | ||
| + | |||
| + | ===== La IA y los workflows ===== | ||
| + | |||
| + | El YAML lo escribe el agente a partir de lo de arriba. Y no hay skill para cuando CI sale en rojo, porque **no debería salir en rojo**: pasa los mismos comandos que ''/ | ||
| + | |||
| + | ===== Ejercicios ===== | ||
| + | |||
| + | ==== Ejercicio 1 ==== | ||
| + | * Crea un issue «CI» e inícialo. | ||
| + | * Comprueba que '' | ||
| + | * Añade el secreto '' | ||
| + | * Escribe '' | ||
| + | |||
| + | ==== Ejercicio 2 ==== | ||
| + | * Pide al profesor que registre tu runner | ||
| + | * Crea un issue «Despliegue» e inícialo. Añade el job '' | ||
| + | * Finaliza el issue y ''/ | ||
| + | |||
| + | ==== Ejercicio 3 ==== | ||
| + | * Añade | ||
| + | * Lánzalos desde //Actions// y lee la salida de '' | ||
| + | |||
| + | ==== Ejercicio 4 ==== | ||
| + | * Cambia a propósito la URL del smoke test por una que no existe, finaliza el issue y publica. CI pasa y '' | ||
| + | * Haz un cambio visible en la aplicación, | ||
| + | |||
| + | Fuera de este tema, por ser de un sistema real y no de un proyecto de clase: entornos de '' | ||
clase/daw/daw-proyecto/tema07.1791976215.txt.gz · Última modificación: por claude
