clase:daw:daw: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:tema07 [2026/10/28 09:57] – ↷ Página movida de clase:daw:daw:1eval:tema07 a clase:daw:daw:tema07 Lorenzo | clase:daw:daw:tema07 [2026/10/28 10:18] (actual) – Quitar la sección «Contenedor con Jenkins»: el concepto ya está en la introducción claude | ||
|---|---|---|---|
| Línea 8: | Línea 8: | ||
| * [[https:// | * [[https:// | ||
| - | Es despliegue continuo es desplegar las aplicaciones web lo más pronto posible. | + | El despliegue continuo es desplegar las aplicaciones web lo más pronto posible: cada cambio que se sube al repositorio acaba en el servidor sin que nadie tenga que hacerlo a mano. |
| - | Hay varias formas de hacer eso, las 2 que vamos a comentar son: | + | Para eso se usa un **servidor de automatización**: un programa que, cuando ocurre algo (un '' |
| - | | + | |
| - | | + | |
| + | - Descargar el código del repositorio. | ||
| + | - Compilarlo y pasar los tests. | ||
| + | - Construir la imagen Docker. | ||
| + | - Conectarse al servidor y arrancar la nueva versión. | ||
| - | ===== Contenedor con Jenkins ===== | + | Si un paso falla, se para ahí y avisa: |
| - | Jenkins es lo que se llama un " | + | |
| - | {{:clase:daw:daw:2eval: | + | Los dos que vamos a ver son: |
| + | * [[https:// | ||
| + | * [[https://github.com/ | ||
| - | Hay abundante documentación sobre él , en los siguientes enlaces: | + | ^ ^ Jenkins ^ GitHub Actions ^ |
| - | * [[https:// | + | | Dónde se ejecuta | En un servidor nuestro | En máquinas de GitHub | |
| - | * [[https:// | + | | Hay que instalarlo y mantenerlo | ✓ | | |
| - | * [[https:// | + | | Dónde se escriben los pasos | En Jenkins | En el repositorio, |
| - | * [[https:// | + | | Sirve para repositorios fuera de GitHub | ✓ | | |
| - | Aunque Jenkins pueda parecer sencillo o superfluo, usar Jenkins //**es el camino**// para hacer software de calidad.: | + | Si el proyecto está en GitHub, usa GitHub Actions. |
| - | + | ||
| - | {{: | + | |
| ===== GitHub Actions ===== | ===== GitHub Actions ===== | ||
| - | GitHub | + | Un **workflow** es un fichero YAML dentro de la carpeta '' |
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Lo que no debe estar en el repositorio (contraseñas, | ||
| + | |||
| + | <note important> | ||
| + | <note important> | ||
| - | Para ello en el código fuente del proyecto Java , hay que añadir el fichero '' | + | Para desplegar |
| <sxh yml> | <sxh yml> | ||
| Línea 91: | Línea 103: | ||
| </ | </ | ||
| - | Ahora al hacer cualquier cambio en la rama '' | + | Ahora al hacer cualquier cambio en la rama '' |
| + | |||
| + | Cada ejecución sale en la pestaña //Actions// del repositorio, | ||
| Puedes ver un ejemplo en [[https:// | Puedes ver un ejemplo en [[https:// | ||
| + | |||
| + | ===== GitHub CLI ===== | ||
| + | '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Se instala con: | ||
| + | |||
| + | * **Windows**: | ||
| + | * **Linux**: '' | ||
| + | * **Mac**: '' | ||
| + | |||
| + | <sxh bash> | ||
| + | gh auth login # GitHub.com, HTTPS, navegador. Guarda también la credencial de git | ||
| + | gh auth status | ||
| + | gh auth refresh -s project | ||
| + | </ | ||
| + | |||
| + | Las órdenes de '' | ||
| + | |||
| + | Más información: | ||
| + | * [[https:// | ||
| + | |||
| + | ==== Issues ==== | ||
| + | GitHub ya trae la etiqueta '' | ||
| + | |||
| + | <sxh bash> | ||
| + | gh label create feature | ||
| + | </ | ||
| + | |||
| + | * Crear un issue. Responde con su URL, que acaba en su número: | ||
| + | <sxh bash> | ||
| + | gh issue create --title "Alta de clientes" | ||
| + | </ | ||
| + | * Listar los issues abiertos: | ||
| + | <sxh bash> | ||
| + | gh issue list | ||
| + | </ | ||
| + | * Ver el título, la descripción y el estado del issue 12: | ||
| + | <sxh bash> | ||
| + | gh issue view 12 | ||
| + | </ | ||
| + | * Ponerle una etiqueta: | ||
| + | <sxh bash> | ||
| + | gh issue edit 12 --add-label bug | ||
| + | </ | ||
| + | * Cerrarlo: | ||
| + | <sxh bash> | ||
| + | gh issue close 12 | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | ==== Workflows ==== | ||
| + | * Lanzar a mano un workflow que tiene '' | ||
| + | <sxh bash> | ||
| + | gh workflow run desplegar.yml | ||
| + | </ | ||
| + | * Seguir en directo el workflow que se acaba de lanzar: | ||
| + | <sxh bash> | ||
| + | gh run watch | ||
| + | </ | ||
| + | * Ver las últimas ejecuciones, | ||
| + | <sxh bash> | ||
| + | gh run list --limit 5 | ||
| + | </ | ||
| + | * Ver solo los pasos que han fallado de una ejecución: | ||
| + | <sxh bash> | ||
| + | gh run view 123456 --log-failed | ||
| + | </ | ||
| + | |||
| + | Un workflow rojo tiene un log largo y la causa está en tres líneas: '' | ||
| + | |||
| + | ===== GitHub Projects ===== | ||
| + | Un **Project** es un tablero de GitHub con los issues del repositorio como tarjetas, repartidas en columnas por su estado: //Todo//, //In Progress// y //Done//. Está en GitHub, en el menú // | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ==== Crear el tablero ==== | ||
| + | |||
| + | Uno por proyecto, desde el menú '' | ||
| + | |||
| + | * En //Start from scratch//, la plantilla **Board**. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | * El nombre del proyecto y, marcado, //Import items from repository// | ||
| + | |||
| + | {{: | ||
| + | |||
| + | * Sale con las tres columnas, //Todo//, //In Progress// y //Done//, las que usan los scripts. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <note important> | ||
| + | |||
| + | ==== Scripts para los issues ==== | ||
| + | |||
| + | Mover una tarjeta con '' | ||
| + | |||
| + | * **Crear un issue**: lo crea, lo añade al Project (en //Todo//) y responde con su número. La etiqueta, si no se da, es '' | ||
| + | |||
| + | <sxh bash; | ||
| + | #!/bin/bash | ||
| + | # Uso: issue_create.sh " | ||
| + | PROJECT=$(gh api graphql -F owner=' | ||
| + | |||
| + | URL=$(gh issue create --title " | ||
| + | gh project item-add $PROJECT --owner @me --url $URL > /dev/null 2>& | ||
| + | echo $URL | grep -o ' | ||
| + | </ | ||
| + | |||
| + | <sxh bash> | ||
| + | scripts/ | ||
| + | scripts/ | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | * **Empezar un issue**: pasa su tarjeta a //In Progress//. | ||
| + | |||
| + | <sxh bash; | ||
| + | #!/bin/bash | ||
| + | # Uso: issue_in_progress.sh N | ||
| + | PROJECT=$(gh api graphql -F owner=' | ||
| + | N=$1 | ||
| + | |||
| + | PROJECT_ID=$(gh project view $PROJECT --owner @me --format json --jq .id) | ||
| + | CAMPO=$(gh project field-list $PROJECT --owner @me --format json --jq ' | ||
| + | OPCION=$(gh project field-list $PROJECT --owner @me --format json --jq ' | ||
| + | TARJETA=$(gh project item-list $PROJECT --owner @me --limit 1000 --format json --jq " | ||
| + | |||
| + | if [ -z " | ||
| + | |||
| + | gh project item-edit --project-id $PROJECT_ID --field-id $CAMPO --single-select-option-id $OPCION --id $TARJETA > /dev/null || { echo "No se ha podido mover la tarjeta del issue #$N"; exit 1; } | ||
| + | echo "Issue #$N en In Progress" | ||
| + | </ | ||
| + | |||
| + | <sxh bash> | ||
| + | scripts/ | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | |||
| + | * **Cerrar un issue**: lo cierra y pasa su tarjeta a //Done//. | ||
| + | |||
| + | <sxh bash; | ||
| + | #!/bin/bash | ||
| + | # Uso: issue_close.sh N | ||
| + | PROJECT=$(gh api graphql -F owner=' | ||
| + | N=$1 | ||
| + | |||
| + | PROJECT_ID=$(gh project view $PROJECT --owner @me --format json --jq .id) | ||
| + | CAMPO=$(gh project field-list $PROJECT --owner @me --format json --jq ' | ||
| + | OPCION=$(gh project field-list $PROJECT --owner @me --format json --jq ' | ||
| + | TARJETA=$(gh project item-list $PROJECT --owner @me --limit 1000 --format json --jq " | ||
| + | |||
| + | if [ -z " | ||
| + | |||
| + | gh issue close $N > /dev/null 2>&1 | ||
| + | gh project item-edit --project-id $PROJECT_ID --field-id $CAMPO --single-select-option-id $OPCION --id $TARJETA > /dev/null || { echo "No se ha podido mover la tarjeta del issue #$N"; exit 1; } | ||
| + | echo "Issue #$N cerrado y en Done" | ||
| + | </ | ||
| + | |||
| + | <sxh bash> | ||
| + | scripts/ | ||
| + | </ | ||
| ===== Ejercicios ===== | ===== Ejercicios ===== | ||
| - | ===== Ejercicio 1 ===== | + | ==== Ejercicio 1 ==== |
| Añade al repositorio de tu código fuente de Java una acción de //GitHhub Actions// que sea para desplegar. | Añade al repositorio de tu código fuente de Java una acción de //GitHhub Actions// que sea para desplegar. | ||
| Línea 103: | Línea 286: | ||
| * Manualmente | * Manualmente | ||
| * Cuando haya un cambio en '' | * Cuando haya un cambio en '' | ||
| + | |||
| + | ==== Ejercicio 2 ==== | ||
| + | * Instala '' | ||
| + | * En tu repositorio de Java, crea la etiqueta '' | ||
| + | * Lanza a mano el workflow del ejercicio 1 con '' | ||
| + | |||
| + | ==== Ejercicio 3 ==== | ||
| + | * Crea el tablero del repositorio como en [[# | ||
| + | * Copia los tres scripts en la carpeta '' | ||
| + | * Crea un issue con '' | ||
| + | |||
clase/daw/daw/tema07.1793177835.txt.gz · Última modificación: por Lorenzo
