Actividad 2. API Spring Boot con GitHub Actions y AWS Elastic Beanstalk
Práctica: API REST en Spring Boot con Integración Continua y Despliegue en la nube (GitHub Actions + AWS Elastic Beanstalk)
3. Fase 2: Control de versiones (Git)
Una vez preparado el entorno de construcción reproducible, es necesario integrar un sistema de control de versiones.
La Integración Continua depende directamente de Git, ya que los pipelines se ejecutan a partir de eventos como commits o push al repositorio remoto.
Por tanto, esta fase es imprescindible antes de automatizar cualquier proceso.
Inicialización del repositorio Git
Durante la creación del proyecto se ha inicializado un repositorio Git local, lo que permite registrar la evolución del código desde el primer momento.
En este punto:
-
el repositorio no contiene aún ningún commit,
-
pero Git ya detecta los archivos del proyecto.
Se comprueba el estado inicial del repositorio con:
git status
En este punto, el repositorio no contiene aún ningún commit, pero ya se encuentran detectados los archivos del proyecto.
Configuración del archivo .gitignore
Antes de realizar el primer commit, se configura el archivo .gitignore para evitar subir al repositorio:
-
archivos generados por el proceso de compilación,
-
configuraciones específicas del IDE,
-
ficheros del sistema operativo.
Un .gitignore que tenemos es algo parecido a esto:
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
.kotlin
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
Se configura .gitignore para excluir configuraciones del IDE (carpeta .idea/) y artefactos generados (target/).
Un .gitignore mínimo y adecuado para este proyecto es:
# Maven
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
# IntelliJ IDEA
.idea/
*.iml
*.iws
*.ipr
# macOS
.DS_Store
Revisión del estado del repositorio
Hago el git status y necesito cambiar cosillas:
damiansualdea@Mac-Studio-de-Damian-2 dam-ci-cd-api-001 % git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: .idea/.gitignore
new file: .idea/misc.xml
new file: .idea/vcs.xml
new file: pom.xml
new file: src/main/java/com/dam/cicd/Main.java
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: pom.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
.mvn/
mvnw
mvnw.cmd
Viendo esto necesito quitar .idea del índice
git rm -r --cached .idea
Unificar pom.xml, Para que no esté “new” y “modified” a la vez:
git add pom.xml
Añadir Maven Wrapper (imprescindible para CI)
git add mvnw mvnw.cmd .mvn
Asegurar lo básico
git add .gitignore src
Revisión final
git status
damiansualdea@Mac-Studio-de-Damian-2 dam-ci-cd-api-001 % git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: .mvn/wrapper/MavenWrapperDownloader.java
new file: .mvn/wrapper/maven-wrapper.jar
new file: .mvn/wrapper/maven-wrapper.properties
new file: mvnw
new file: mvnw.cmd
new file: pom.xml
new file: src/main/java/com/dam/cicd/Main.java
Este git status es exactamente el estado ideal para el primer commit de un proyecto preparado para CI/CD.
Damos nuestro datos:
git config --global user.name "Damián"
git config --global user.email "info@damiansu.com"
git config --global --list
Primer commit del proyecto
Se registra el primer commit del proyecto:
git commit -m "Configuración inicial del proyecto para CI/CD"
Se verifica el historial:
git log --oneline
Validación final del entorno local
Como última comprobación antes de automatizar, se valida que el proyecto puede construirse y ejecutar su fase de tests usando el Maven Wrapper:
./mvnw test
La ejecución finaliza correctamente con:
-
BUILD SUCCESS
Ejecución de la fase test mediante maven-surefire-plugin
damiansualdea@Mac-Studio-de-Damian-2 dam-ci-cd-api-001 % ./mvnw test
[INFO] Scanning for projects...
[INFO]
[INFO] -------------------< com.dam.cicd:dam-ci-cd-api-001 >-------------------
[INFO] Building dam-ci-cd-api-001 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ dam-ci-cd-api-001 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ dam-ci-cd-api-001 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ dam-ci-cd-api-001 ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/damiansualdea/IdeaProjects/dam-ci-cd-api-001/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ dam-ci-cd-api-001 ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ dam-ci-cd-api-001 ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
Aunque todavía no existan tests implementados, esta validación garantiza que:
-
el proyecto compila correctamente,
-
Maven funciona mediante wrapper,
-
y el entorno local queda preparado para integrarlo en un pipeline de Integración Continua.
En la siguiente fase se configurará GitHub Actions, donde cada push al repositorio activará automáticamente el proceso de Integración Continua.