ci: implements jenkins deploy
This commit is contained in:
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
||||
# Stage 1: build
|
||||
FROM node:20-alpine AS build
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
COPY . .
|
||||
RUN npm run build # Esto genera /dist
|
||||
|
||||
# Stage 2: serve con Nginx
|
||||
FROM nginx:alpine
|
||||
COPY --from=build /app/dist /usr/share/nginx/html
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
EXPOSE 80
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
69
Jenkinsfile
vendored
Normal file
69
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,69 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
environment {
|
||||
APP_NAME = "pablotj-portfolio-api"
|
||||
REGISTRY_URL = "registry.pablotj.com"
|
||||
NAMESPACE = "andromeda"
|
||||
USER = "andromeda"
|
||||
PASS = credentials('docker-registry-password')
|
||||
TAG = "latest"
|
||||
HOST_PORT = "8080"
|
||||
CONTAINER_PORT = "3000"
|
||||
}
|
||||
|
||||
stages {
|
||||
|
||||
stage('Preparar') {
|
||||
steps {
|
||||
echo "Limpiando workspace..."
|
||||
deleteDir()
|
||||
}
|
||||
}
|
||||
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
echo "Clonando repo..."
|
||||
checkout scm
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build') {
|
||||
steps {
|
||||
echo "Construyendo imagen..."
|
||||
sh "make build"
|
||||
}
|
||||
}
|
||||
|
||||
stage('Tag') {
|
||||
steps {
|
||||
echo "Tagging imagen..."
|
||||
sh "make tag"
|
||||
}
|
||||
}
|
||||
|
||||
stage('Login & Push') {
|
||||
steps {
|
||||
echo "Subiendo imagen al registry..."
|
||||
sh "docker login ${REGISTRY_URL} -u ${USER} -p ${PASS}"
|
||||
sh "make push"
|
||||
}
|
||||
}
|
||||
|
||||
stage('Deploy') {
|
||||
steps {
|
||||
echo "Deteniendo y levantando contenedor..."
|
||||
sh "make deploy"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
echo "Despliegue completado correctamente"
|
||||
}
|
||||
failure {
|
||||
echo "Ha fallado el pipeline"
|
||||
}
|
||||
}
|
||||
}
|
||||
33
Makefile
Normal file
33
Makefile
Normal file
@@ -0,0 +1,33 @@
|
||||
APP_NAME=pablotj-portfolio-api
|
||||
IMAGE_NAME=$(APP_NAME)
|
||||
|
||||
REGISTRY_URL=registry.pablotj.com
|
||||
NAMESPACE=andromeda
|
||||
TAG?=latest
|
||||
|
||||
HOST_PORT=8080
|
||||
CONTAINER_PORT=3000
|
||||
|
||||
IMAGE_FULL=$(REGISTRY_URL)/$(NAMESPACE)/$(IMAGE_NAME):$(TAG)
|
||||
|
||||
build:
|
||||
docker build -t $(IMAGE_NAME):$(TAG) .
|
||||
|
||||
tag:
|
||||
docker tag $(IMAGE_NAME):$(TAG) $(IMAGE_FULL)
|
||||
|
||||
push:
|
||||
docker push $(IMAGE_FULL)
|
||||
|
||||
run:
|
||||
docker run -d \
|
||||
--name $(APP_NAME) \
|
||||
-p $(HOST_PORT):$(CONTAINER_PORT) \
|
||||
--env-file .env \
|
||||
$(IMAGE_FULL)
|
||||
|
||||
stop:
|
||||
docker stop $(APP_NAME) || true
|
||||
docker rm $(APP_NAME) || true
|
||||
|
||||
deploy: build tag push stop run
|
||||
Reference in New Issue
Block a user