Skip to content

Commit ef6c96c

Browse files
authored
Merge pull request #210 from Lemoncode/feature/cicd-exercises-2023
Updated CI/CD exercises
2 parents 3e98704 + 601d3f1 commit ef6c96c

1 file changed

Lines changed: 69 additions & 45 deletions

File tree

03-cd/exercises/README.md

Lines changed: 69 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,105 @@
11
# 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+
39
## Ejercios Jenkins
4-
5-
### 1. CI/CD de una Java + Gradle
6-
10+
11+
### 1. CI/CD de una Java + Gradle - OBLIGATORIO
12+
713
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+
915
* **Checkout** descarga de código desde un repositorio remoto, preferentemente utiliza GitHub.
1016
* **Compile** compilar el código fuente, para ello utilizar `gradlew compileJava`
1117
* **Unit Tests** ejecutar los test unitarios, para ello utilizar `gradlew test`
12-
18+
1319
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
1622

1723
* Utilizar Docker in Docker a la hora de levantar Jenkins para realizar este ejercicio.
1824
* Como plugins deben estar instalados `Docker` y `Docker Pipeline`
1925
* Usar la imagen de Docker `gradle:6.6.1-jre14-openj9`
20-
26+
2127
## 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+
2531
* 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).
2632
* Sube el código al repositorio recientemente creado en GitLab.
2733
* 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+
3339
* **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+
3945
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+
4249
* Añadirlo con el role `guest`, comprobar que acciones puede hacer.
4350
* Cambiar a role `reporter`, comprobar que acciones puede hacer.
4451
* Cambiar a role `developer`, comprobar que acciones puede hacer.
4552
* 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:
5565

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+
6275
> Pista: https://docs.gitlab.com/ee/ci/ssh_keys/
63-
6476
6577
## Ejercicios GitHub Actions
6678

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.
6882

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:
7084

7185
* Build del proyecto de front
7286
* Ejecutar los unit tests
7387

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
7589

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:
7791

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)
7894

79-
### Ejercicio 3. Crea un workflow que ejecute tests e2e
95+
### Ejercicio 3. Crea un workflow que ejecute tests e2e - OPCIONAL
8096

8197
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

Comments
 (0)