Skip to content

Commit bdcc067

Browse files
committed
Prueba final CI
1 parent c4f88e4 commit bdcc067

33 files changed

Lines changed: 173 additions & 32 deletions

README.md

Lines changed: 172 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ Además, el sistema expone endpoints para:
4343

4444
## 🔹 1. Crear proyecto en SpringBoot
4545

46-
![img.png](img.png)
46+
![img.png](docs/imagenes/img.png)
4747

4848
Y ordenamos las carpetas de tal manera que quede como una arquitectura de capas donde vamos a segmentar las responsabilidades.
4949

50-
![img_1.png](img_1.png)
50+
![img_1.png](docs/imagenes/img_1.png)
5151

5252
Luego empezamos a crear la lógica en cada carpeta para poder realizar las Apis donde:
5353

@@ -63,97 +63,243 @@ Luego empezamos a crear la lógica en cada carpeta para poder realizar las Apis
6363

6464
Creamos la base de datos en Atlas ya que es accesible desde cualquier lado incluído azure, gratis, fácil de usar, se conecta con URI y es la mejor opción para el despliegue en azure + swagger.
6565

66-
![img_2.png](img_2.png)
66+
![img_2.png](docs/imagenes/img_2.png)
6767

6868
Y ya por último ponemos la URL en el application.properties para terminar de configurarlo.
6969

70-
![img_3.png](img_3.png)
70+
![img_3.png](docs/imagenes/img_3.png)
7171

7272
## 🔹 3. API con pruebas unitarias
7373

7474
Una vez ya tenemos las 12 funcionalidades, realizamos las 3 pruebas que nos piden y ejecutamos el comando mvn test.
7575

76-
![img_4.png](img_4.png)
76+
![img_4.png](docs/imagenes/img_4.png)
7777

7878
## 🔹 3. Probamos los request y response por cada Endpoint
7979

8080
### POST /api/recetas/televidente
8181

82-
![img_8.png](img_8.png)
82+
![img_8.png](docs/imagenes/img_8.png)
8383

84-
![img_9.png](img_9.png)
84+
![img_9.png](docs/imagenes/img_9.png)
8585

8686
### POST /api/recetas/participante
8787

88-
![img_10.png](img_10.png)
88+
![img_10.png](docs/imagenes/img_10.png)
8989

90-
![img_11.png](img_11.png)
90+
![img_11.png](docs/imagenes/img_11.png)
9191

9292
### POST /api/recetas/chef
9393

94-
![img_12.png](img_12.png)
94+
![img_12.png](docs/imagenes/img_12.png)
9595

96-
![img_13.png](img_13.png)
96+
![img_13.png](docs/imagenes/img_13.png)
9797

9898
### GET /api/recetas
9999

100100
Lista de todas las recetas creadas anteriormente:
101101

102-
![img_14.png](img_14.png)
102+
![img_14.png](docs/imagenes/img_14.png)
103103

104104
### GET /api/recetas/{id}
105105

106-
![img_15.png](img_15.png)
106+
![img_15.png](docs/imagenes/img_15.png)
107107

108-
![img_16.png](img_16.png)
108+
![img_16.png](docs/imagenes/img_16.png)
109109

110110
### GET /api/recetas/televidente
111111

112112
Solo recetas con tipoAutor: TELEVIDENTE
113113

114-
![img_17.png](img_17.png)
114+
![img_17.png](docs/imagenes/img_17.png)
115115

116116
### GET /api/recetas/participante
117117

118118
Solo recetas con tipoAutor: PARTICIPANTE
119119

120-
![img_18.png](img_18.png)
120+
![img_18.png](docs/imagenes/img_18.png)
121121

122122
### GET /api/recetas/chef
123123

124124
Solo recetas con tipoAutor: CHEF
125125

126-
![img_19.png](img_19.png)
126+
![img_19.png](docs/imagenes/img_19.png)
127127

128128
### GET /api/recetas/temporada/{numero}
129129

130-
![img_20.png](img_20.png)
130+
![img_20.png](docs/imagenes/img_20.png)
131131

132-
![img_21.png](img_21.png)
132+
![img_21.png](docs/imagenes/img_21.png)
133133

134134
### GET /api/recetas/buscar/{nombre}
135135

136-
![img_22.png](img_22.png)
136+
![img_22.png](docs/imagenes/img_22.png)
137137

138-
![img_23.png](img_23.png)
138+
![img_23.png](docs/imagenes/img_23.png)
139139

140140
### DELETE /api/recetas/{id}
141141

142-
![img_24.png](img_24.png)
142+
![img_24.png](docs/imagenes/img_24.png)
143143

144-
![img_25.png](img_25.png)
144+
![img_25.png](docs/imagenes/img_25.png)
145145

146146
### PUT /api/recetas/{id}
147147

148-
![img_26.png](img_26.png)
148+
![img_26.png](docs/imagenes/img_26.png)
149149

150-
![img_27.png](img_27.png)
150+
![img_27.png](docs/imagenes/img_27.png)
151151

152152
Y con eso terminamos de probar las 12 funcionalidades de nuestra API en Swagger.
153153

154154

155155
Y comprobamos si se guardó en la base de datos en MongoDB
156156

157-
![img_28.png](img_28.png)
157+
![img_28.png](docs/imagenes/img_28.png)
158158

159+
## 🔹 4. CI/CD con GitHub Actions
159160

161+
Para garantizar la integración y despliegue continuo del proyecto, se configuraron **pipelines de CI/CD** utilizando **GitHub Actions**.
162+
Este flujo permite automatizar la ejecución de pruebas y el despliegue automático en Azure App Service.
163+
164+
---
165+
166+
### Paso 1. Crear la estructura de GitHub Actions
167+
168+
Dentro del proyecto, se creó la siguiente ruta:
169+
170+
```
171+
.github/
172+
└── workflows/
173+
├── ci.yml
174+
└── deploy.yml
175+
```
176+
177+
Esta carpeta le indica a GitHub que debe buscar en ella los archivos YAML que definen los **workflows** (automatizaciones) del repositorio.
178+
179+
---
180+
181+
### Paso 2. Configurar el workflow de Integración Continua (CI)
182+
183+
El archivo **`ci.yml`** se encarga de compilar el proyecto y ejecutar las pruebas unitarias cada vez que se hace un **push o pull request a la rama `develop`**.
184+
185+
```yaml
186+
name: CI - MasterChef API
187+
188+
on:
189+
push:
190+
branches:
191+
- develop
192+
pull_request:
193+
branches:
194+
- develop
195+
196+
jobs:
197+
build:
198+
runs-on: ubuntu-latest
199+
200+
steps:
201+
- name: Checkout repository
202+
uses: actions/checkout@v3
203+
204+
- name: Set up JDK 21
205+
uses: actions/setup-java@v3
206+
with:
207+
java-version: '21'
208+
distribution: 'temurin'
209+
210+
- name: Build with Maven
211+
run: mvn clean install
212+
213+
- name: Run tests
214+
run: mvn test
215+
```
216+
217+
🔹 **Qué hace este pipeline:**
218+
- Detecta cambios en la rama `develop`.
219+
- Descarga el código del repositorio.
220+
- Instala Java 21 (distribución Temurin).
221+
- Compila el proyecto con Maven.
222+
- Ejecuta todas las pruebas unitarias (`mvn test`).
223+
224+
✅ Si las pruebas pasan correctamente, GitHub mostrará el workflow en verde.
225+
En caso de fallar, se marcará en rojo y se impedirá el merge a `main`.
226+
227+
---
228+
229+
### Paso 3. Configurar el workflow de Despliegue Continuo (CD)
230+
231+
El archivo **`deploy.yml`** se encarga de desplegar automáticamente la aplicación en **Azure App Service** cuando se hace **push a la rama `main`**.
232+
233+
```yaml
234+
name: CD - Deploy to Azure App Service
235+
236+
on:
237+
push:
238+
branches:
239+
- main
240+
241+
jobs:
242+
deploy:
243+
runs-on: ubuntu-latest
244+
245+
steps:
246+
- name: Checkout repository
247+
uses: actions/checkout@v3
248+
249+
- name: Set up JDK 21
250+
uses: actions/setup-java@v3
251+
with:
252+
java-version: '21'
253+
distribution: 'temurin'
254+
255+
- name: Login to Azure
256+
uses: azure/login@v1
257+
with:
258+
creds: ${{ secrets.AZURE_CREDENTIALS }}
259+
260+
- name: Build with Maven
261+
run: mvn clean package
262+
263+
- name: Deploy to Azure Web App
264+
uses: azure/webapps-deploy@v2
265+
with:
266+
app-name: masterchef
267+
slot-name: production
268+
package: target/*.jar
269+
```
270+
271+
🔹 **Qué hace este pipeline:**
272+
- Se activa automáticamente con cualquier cambio en la rama `main`.
273+
- Compila el proyecto (`mvn clean package`).
274+
- Inicia sesión en Azure usando las credenciales almacenadas en `secrets.AZURE_CREDENTIALS`.
275+
- Despliega el archivo `.jar` resultante en el servicio **Azure App Service** (`masterchef-api`).
276+
277+
---
278+
279+
### Paso 4. Crear el secreto de conexión con Azure
280+
281+
Para permitir que GitHub Actions se comunique con Azure, se generó un **secreto de autenticación**:
282+
283+
1. En el portal de Azure, se creó una credencial mediante **Azure CLI** o el botón *“Obtener credenciales de publicación”*.
284+
2. En GitHub, se fue a:
285+
`Settings → Secrets and variables → Actions → New repository secret`
286+
3. Se creó un nuevo secreto llamado:
287+
```
288+
AZURE_CREDENTIALS
289+
```
290+
y se pegó allí el contenido JSON con las credenciales de Azure.
291+
292+
---
293+
294+
### Paso 5. Validar el flujo completo
295+
296+
- Al hacer un **push o pull request a `develop`**, se ejecuta el workflow **CI**, ejecutando pruebas automáticas.
297+
- Al hacer un **push o merge a `main`**, se activa el **CD**, desplegando automáticamente la aplicación en Azure.
298+
- Una vez finalizado el despliegue, la API queda disponible en la siguiente URL:
299+
300+
🔗 **https://masterchef-feaxhgdabggufyb9.westus3-01.azurewebsites.net/swagger-ui/index.html**
301+
302+
---
303+
304+
📄 **Resultado final:**
305+
Con esta configuración, el proyecto cuenta con un flujo de **integración y despliegue continuo totalmente automatizado**, garantizando calidad en el código y actualizaciones instantáneas en el entorno de producción.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)