ci: implements jenkins deploy
This commit is contained in:
48
Dockerfile
48
Dockerfile
@@ -1,16 +1,40 @@
|
||||
# Stage 1: Build
|
||||
FROM maven:3.9-eclipse-temurin-21-alpine AS build
|
||||
# --- Stage 1: Dependencias ---
|
||||
FROM maven:3.9-eclipse-temurin-21-alpine AS deps
|
||||
WORKDIR /app
|
||||
# Copiamos solo el pom.xml para descargar librerías (esta capa se cachea)
|
||||
COPY pom.xml .
|
||||
COPY application/pom.xml ./application
|
||||
COPY bootstrap/pom.xml ./bootstrap
|
||||
COPY domain/pom.xml ./domain
|
||||
COPY infrastructure/pom.xml ./infrastructure
|
||||
RUN mvn dependency:go-offline
|
||||
|
||||
# --- Stage 2: Build ---
|
||||
FROM deps AS build
|
||||
COPY application/src ./application/src
|
||||
COPY bootstrap/src ./bootstrap/src
|
||||
COPY domain/src ./domain/src
|
||||
COPY infrastructure/src ./infrastructure/src
|
||||
# Al haber descargado las deps antes, esto es mucho más rápido
|
||||
RUN mvn clean package -DskipTests -Dmaven.main.skip=false
|
||||
|
||||
# --- Stage 3: Run (Imagen final ultra-ligera) ---
|
||||
FROM eclipse-temurin:21-jre-alpine
|
||||
WORKDIR /app
|
||||
|
||||
# Copiamos todo el proyecto
|
||||
COPY . .
|
||||
# Crear un usuario sin privilegios por seguridad y para ahorrar recursos
|
||||
RUN addgroup -S spring && adduser -S spring -G spring
|
||||
USER spring:spring
|
||||
|
||||
# Compilamos todo el proyecto (todos los módulos)
|
||||
RUN mvn clean package -DskipTests
|
||||
|
||||
# Stage 2: Run
|
||||
FROM openjdk:21-jdk
|
||||
WORKDIR /app
|
||||
COPY --from=build /app/bootstrap/target/*.jar app.jar
|
||||
EXPOSE 80
|
||||
ENTRYPOINT ["java", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", "-Xmx512m", "-Xms256m", "-jar", "app.jar"]
|
||||
|
||||
# Optimización de flags para APIs pequeñas:
|
||||
# 1. SerialGC consume menos memoria que G1GC en montones pequeños (< 1GB)
|
||||
# 2. TieredCompilation ayuda a arrancar más rápido con menos CPU
|
||||
ENTRYPOINT ["java", \
|
||||
"-XX:+UseContainerSupport", \
|
||||
"-XX:MaxRAMPercentage=70.0", \
|
||||
"-XX:+UseSerialGC", \
|
||||
"-XX:TieredStopAtLevel=1", \
|
||||
"-Xms64m", \
|
||||
"-jar", "app.jar"]
|
||||
3
Jenkinsfile
vendored
3
Jenkinsfile
vendored
@@ -70,5 +70,8 @@ pipeline {
|
||||
failure {
|
||||
echo "❌ Pipeline failed!"
|
||||
}
|
||||
always {
|
||||
deleteDir()
|
||||
}
|
||||
}
|
||||
}
|
||||
6
Makefile
6
Makefile
@@ -1,3 +1,4 @@
|
||||
STACK=pablotj-portfolio
|
||||
APP_NAME=pablotj-portfolio-api
|
||||
IMAGE_NAME=$(APP_NAME)
|
||||
|
||||
@@ -6,7 +7,7 @@ NAMESPACE=andromeda
|
||||
TAG?=latest
|
||||
|
||||
HOST_PORT=8181
|
||||
CONTAINER_PORT=80
|
||||
CONTAINER_PORT=8080
|
||||
|
||||
IMAGE_FULL=$(REGISTRY_URL)/$(NAMESPACE)/$(IMAGE_NAME):$(TAG)
|
||||
|
||||
@@ -22,6 +23,9 @@ push:
|
||||
run:
|
||||
docker run -d \
|
||||
--name $(APP_NAME) \
|
||||
--label com.docker.compose.service="$(APP_NAME)" \
|
||||
--label com.docker.compose.project="$(STACK)" \
|
||||
--network andromeda \
|
||||
-p $(HOST_PORT):$(CONTAINER_PORT) \
|
||||
--env-file .env \
|
||||
$(IMAGE_FULL)
|
||||
|
||||
@@ -124,11 +124,6 @@ alter table if exists experience_skill
|
||||
foreign key (experience_id)
|
||||
references experience;
|
||||
|
||||
alter table if exists profile_social_link
|
||||
add constraint FKfh1pbfvvg3palcr1yip6jffik
|
||||
foreign key (PROFILE_ID)
|
||||
references profile;
|
||||
|
||||
alter table if exists project_feature
|
||||
add constraint FKdifppyvrfito5in15ox4db0up
|
||||
foreign key (project_id)
|
||||
|
||||
Reference in New Issue
Block a user