You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -43,11 +43,11 @@ Además, el sistema expone endpoints para:
43
43
44
44
## 🔹 1. Crear proyecto en SpringBoot
45
45
46
-

46
+

47
47
48
48
Y ordenamos las carpetas de tal manera que quede como una arquitectura de capas donde vamos a segmentar las responsabilidades.
49
49
50
-

50
+

51
51
52
52
Luego empezamos a crear la lógica en cada carpeta para poder realizar las Apis donde:
53
53
@@ -63,97 +63,243 @@ Luego empezamos a crear la lógica en cada carpeta para poder realizar las Apis
63
63
64
64
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.
65
65
66
-

66
+

67
67
68
68
Y ya por último ponemos la URL en el application.properties para terminar de configurarlo.
69
69
70
-

70
+

71
71
72
72
## 🔹 3. API con pruebas unitarias
73
73
74
74
Una vez ya tenemos las 12 funcionalidades, realizamos las 3 pruebas que nos piden y ejecutamos el comando mvn test.
75
75
76
-

76
+

77
77
78
78
## 🔹 3. Probamos los request y response por cada Endpoint
79
79
80
80
### POST /api/recetas/televidente
81
81
82
-

82
+

83
83
84
-

84
+

85
85
86
86
### POST /api/recetas/participante
87
87
88
-

88
+

89
89
90
-

90
+

91
91
92
92
### POST /api/recetas/chef
93
93
94
-

94
+

95
95
96
-

96
+

97
97
98
98
### GET /api/recetas
99
99
100
100
Lista de todas las recetas creadas anteriormente:
101
101
102
-

102
+

103
103
104
104
### GET /api/recetas/{id}
105
105
106
-

106
+

107
107
108
-

108
+

109
109
110
110
### GET /api/recetas/televidente
111
111
112
112
Solo recetas con tipoAutor: TELEVIDENTE
113
113
114
-

114
+

115
115
116
116
### GET /api/recetas/participante
117
117
118
118
Solo recetas con tipoAutor: PARTICIPANTE
119
119
120
-

120
+

121
121
122
122
### GET /api/recetas/chef
123
123
124
124
Solo recetas con tipoAutor: CHEF
125
125
126
-

126
+

127
127
128
128
### GET /api/recetas/temporada/{numero}
129
129
130
-

130
+

131
131
132
-

132
+

133
133
134
134
### GET /api/recetas/buscar/{nombre}
135
135
136
-

136
+

137
137
138
-

138
+

139
139
140
140
### DELETE /api/recetas/{id}
141
141
142
-

142
+

143
143
144
-

144
+

145
145
146
146
### PUT /api/recetas/{id}
147
147
148
-

148
+

149
149
150
-

150
+

151
151
152
152
Y con eso terminamos de probar las 12 funcionalidades de nuestra API en Swagger.
153
153
154
154
155
155
Y comprobamos si se guardó en la base de datos en MongoDB
156
156
157
-

157
+

158
158
159
+
## 🔹 4. CI/CD con GitHub Actions
159
160
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:
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.
0 commit comments