|
1 | 1 | # Ejercicios |
2 | | - |
| 2 | + |
| 3 | +Para superar el módulo debéis entregar como mínimo: |
| 4 | + |
| 5 | +* La parte obligatoria de los ejercicios de Jenkins o GitLab. |
| 6 | +* La parte obligatoria de los ejercicios de GitHub Actions. |
| 7 | +* Uno de los dos ejercicios opcionales de la parte de GitHub Actions |
| 8 | + |
3 | 9 | ## Ejercios Jenkins |
4 | | - |
5 | | -### 1. CI/CD de una Java + Gradle |
6 | | - |
| 10 | + |
| 11 | +### 1. CI/CD de una Java + Gradle - OBLIGATORIO |
| 12 | + |
7 | 13 | En el directorio raíz de este [código fuente](./jenkins-resources), crea un `Jenkinsfile` que contenga un pipeline declarativa con los siguientes stages: |
8 | | - |
| 14 | + |
9 | 15 | * **Checkout** descarga de código desde un repositorio remoto, preferentemente utiliza GitHub. |
10 | 16 | * **Compile** compilar el código fuente, para ello utilizar `gradlew compileJava` |
11 | 17 | * **Unit Tests** ejecutar los test unitarios, para ello utilizar `gradlew test` |
12 | | - |
| 18 | + |
13 | 19 | Para ejecutar Jenkins en local y tener las dependencias necesarias disponibles podemos contruir una imagen a partir de [este Dockerfile](./jenkins-resources/gradle.Dockerfile) |
14 | | - |
15 | | -### 2. Modificar la pipeline para que utilice la imagen Docker de Gradle como build runner |
| 20 | + |
| 21 | +### 2. Modificar la pipeline para que utilice la imagen Docker de Gradle como build runner - OBLIGATORIO |
16 | 22 |
|
17 | 23 | * Utilizar Docker in Docker a la hora de levantar Jenkins para realizar este ejercicio. |
18 | 24 | * Como plugins deben estar instalados `Docker` y `Docker Pipeline` |
19 | 25 | * Usar la imagen de Docker `gradle:6.6.1-jre14-openj9` |
20 | | - |
| 26 | + |
21 | 27 | ## Ejercicios GitLab |
22 | | - |
23 | | -### 1. CI/CD de una aplicación spring |
24 | | - |
| 28 | + |
| 29 | +### 1. CI/CD de una aplicación spring - OBLIGATORIO |
| 30 | + |
25 | 31 | * Crea un nuevo proyecto en GitLab y un repositorio en el mismo, para la aplicación `springapp`. El código fuente de la misma lo puedes encontrar en este [enlace](../02-gitlab/springapp). |
26 | 32 | * Sube el código al repositorio recientemente creado en GitLab. |
27 | 33 | * Crea una pipeline con los siguientes stages: |
28 | | - * maven:build - En este `stage` el código de la aplicación se compila con [maven](https://maven.apache.org/). |
29 | | - * maven:test - En este `stage` ejecutamos los tests utilizando [maven](https://maven.apache.org/). |
30 | | - * docker:build - En este `stage` generamos una nueva imagen de Docker a partir del Dockerfile suministrado en el raíz del proyecto. |
31 | | - * deploy - En este `stage` utilizamos la imagen anteriormente creada, y la hacemos correr en nuestro local |
32 | | - |
| 34 | + * `maven:build` - En este `stage` el código de la aplicación se compila con [maven](https://maven.apache.org/). |
| 35 | + * `maven:test` - En este `stage` ejecutamos los tests utilizando [maven](https://maven.apache.org/). |
| 36 | + * `docker:build` - En este `stage` generamos una nueva imagen de Docker a partir del Dockerfile suministrado en el raíz del proyecto. |
| 37 | + * `deploy` - En este `stage` utilizamos la imagen anteriormente creada, y la hacemos correr en nuestro local |
| 38 | + |
33 | 39 | * **Pistas**: |
34 | | - - Utiliza la versión de maven 3.6.3 |
35 | | - - El comando para realizar una `build` con maven: `mvn clean package` |
36 | | - - El comando para realizar los tests con maven: `mvn verify` |
37 | | - - Cuando despleguemos la aplicación en local, podemos comprobar su ejecución en: `http://localhost:8080` |
38 | | - |
| 40 | + * Utiliza la versión de maven 3.6.3 |
| 41 | + * El comando para realizar una `build` con maven: `mvn clean package` |
| 42 | + * El comando para realizar los tests con maven: `mvn verify` |
| 43 | + * Cuando despleguemos la aplicación en local, podemos comprobar su ejecución en: `http://localhost:8080` |
| 44 | + |
39 | 45 | En resumen, la `pipeline` de `CI/CD`, debe hacer la build de la aplicación generando los ficheros jar, hacer los tests de maven y finalmente dockerizar la app (el dockerfile ya se proporciona en el repo) y hacer un deploy en local. |
40 | | - |
41 | | -### 2. Crear un usuario nuevo y probar que no puede acceder al proyecto anteriormente creado |
| 46 | + |
| 47 | +### 2. Crear un usuario nuevo y probar que no puede acceder al proyecto anteriormente creado - OBLIGATORIO |
| 48 | + |
42 | 49 | * Añadirlo con el role `guest`, comprobar que acciones puede hacer. |
43 | 50 | * Cambiar a role `reporter`, comprobar que acciones puede hacer. |
44 | 51 | * Cambiar a role `developer`, comprobar que acciones puede hacer. |
45 | 52 | * Cambiar a role `maintainer`, comprobar que acciones puede hacer. |
46 | | - |
47 | | -* **Nota** (acciones a probar): |
48 | | - - Commit |
49 | | - - Ejecutar pipeline manualmente |
50 | | - - Push and pull del repo |
51 | | - - Merge request |
52 | | - - Acceder a la administración del repo |
53 | | - |
54 | | -### 3. Crear un nuevo repositorio, que contenga una pipeline, que clone otro proyecto, springapp anteriormente creado. Realizarlo de las siguientes maneras: |
| 53 | + |
| 54 | +Acciones a probar: |
| 55 | + |
| 56 | +* Commit |
| 57 | +* Ejecutar pipeline manualmente |
| 58 | +* Push and pull del repo |
| 59 | +* Merge request |
| 60 | +* Acceder a la administración del repo |
| 61 | + |
| 62 | +### 3. Crear un nuevo repositorio, que contenga una pipeline, que clone otro proyecto, springapp anteriormente creado - OPCIONAL |
| 63 | + |
| 64 | +Relizar de las siguientes maneras: |
55 | 65 |
|
56 | | -* Con el método de CI job permissions model |
57 | | - - ¿Qué ocurre si el repo que estoy clonando no estoy cómo miembro? |
58 | | - > Pista: https://docs.gitlab.com/ee/user/project/new_ci_build_permissions_model.html (Dependent Repositories) |
59 | | - * Con el método deploy keys |
60 | | - - Crear deploy key en el repo springapp y poner solo lectura |
61 | | - - Crear pipeline que usando la deploy key |
| 66 | +* **Con el método de CI job permissions model** |
| 67 | + * ¿Qué ocurre si el repo que estoy clonando no estoy cómo miembro? |
| 68 | + |
| 69 | +> Pista: https://docs.gitlab.com/ee/user/project/new_ci_build_permissions_model.html (Dependent Repositories) |
| 70 | +
|
| 71 | +* **Con el método deploy keys** |
| 72 | + * Crear deploy key en el repo springapp y poner solo lectura |
| 73 | + * Crear pipeline que usando la deploy key |
| 74 | + |
62 | 75 | > Pista: https://docs.gitlab.com/ee/ci/ssh_keys/ |
63 | | - |
64 | 76 |
|
65 | 77 | ## Ejercicios GitHub Actions |
66 | 78 |
|
67 | | -### Ejercicio 1. Crea un workflow CI para el proyecto de frontend |
| 79 | +### Ejercicio 1. Crea un workflow CI para el proyecto de frontend - OBLIGATORIO |
| 80 | + |
| 81 | +Copia el directorio [.start-code/hangman-front](../03-github-actions/.start-code/hangman-front) en el directorio raíz del mismo repositorio que usaste para las clases de GitHub Actions. Si no lo creaste, crea un repositorio nuevo. |
68 | 82 |
|
69 | | -Copia el directorio [.start-code/hangman-front](../04-github-actions/.start-code/hangman-front) en el directorio raíz del proyecto. Después crea un nuevo workflow, que se disparé cuando exista una nueva pull request, y que ejecute las siguientes oeraciones: |
| 83 | +Después crea un nuevo workflow que se dispare cuando haya cambios en el proyecto `hangman-front` y exista una nueva pull request (deben darse las dos condiciones a la vez). El workflow ejecutará las siguientes operaciones: |
70 | 84 |
|
71 | 85 | * Build del proyecto de front |
72 | 86 | * Ejecutar los unit tests |
73 | 87 |
|
74 | | -### Ejercicio 2. Crea un workflow CD para el proyecto de frontend |
| 88 | +### Ejercicio 2. Crea un workflow CD para el proyecto de frontend - OBLIGATORIO |
75 | 89 |
|
76 | | -Crea un nuevo workflow que se dispare manualment y que cree una nueva imagen de Docker y lo publique en el siguiente [registry](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry) |
| 90 | +Crea un nuevo workflow que se dispare manualmente y haga lo siguiente: |
77 | 91 |
|
| 92 | +* Crear una nueva imagen de Docker |
| 93 | +* Publicar dicha imagen en el [container registry de GitHub](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry) |
78 | 94 |
|
79 | | -### Ejercicio 3. Crea un workflow que ejecute tests e2e |
| 95 | +### Ejercicio 3. Crea un workflow que ejecute tests e2e - OPCIONAL |
80 | 96 |
|
81 | 97 | Crea un workflow que se ejecute de la manera que elijas y que ejecute los tests usando [Docker Compose](https://docs.docker.com/compose/gettingstarted/) o [Cypress action](https://github.com/cypress-io/github-action). |
| 98 | + |
| 99 | +### Ejercicio 4. Crea una custom JavaScript Action - OPCIONAL |
| 100 | + |
| 101 | +Crea una custom JavaScript Action que se ejecute cada vez que una `issue` tenga la etiqueta `motivate`. La acción deberá pintar por consola un mensaje motivacional. Puedes usar [esta API](https://type.fit) gratuita. Puedes encontrar más información de como crear una custom JS action en [este enlace](https://docs.github.com/es/actions/creating-actions/creating-a-javascript-action). |
| 102 | + |
| 103 | +```bash |
| 104 | +curl https://type.fit/api/quotes |
| 105 | +``` |
0 commit comments