portal-app/Jenkinsfile

142 lines
4.6 KiB
Text
Raw Normal View History

2025-03-25 07:56:53 -03:00
pipeline {
agent any
2026-02-02 18:22:45 -03:00
parameters {
string(name: 'PROJECT_NAME', defaultValue: 'portal-app', description: 'Nome do projeto')
string(name: 'GIT_BRANCH', defaultValue: 'main', description: 'Branch')
}
2025-03-25 07:56:53 -03:00
environment {
2026-02-02 18:22:45 -03:00
FORGEJO_HOST = '175.15.15.55'
PODMAN_HOST = '175.15.15.12'
BASE_DIR = '/usr/app'
2025-03-25 07:56:53 -03:00
}
stages {
2026-02-02 18:22:45 -03:00
stage('Sync Código no Podman Host') {
2025-03-25 07:56:53 -03:00
steps {
2026-02-02 18:22:45 -03:00
sshagent(['root-ssh-key']) {
sh """
ssh root@${PODMAN_HOST} '
set -e
PROJECT_DIR=${BASE_DIR}/${params.PROJECT_NAME}
mkdir -p \$PROJECT_DIR
mkdir -p \$PROJECT_DIR/.deploy
if [ ! -d "\$PROJECT_DIR/.git" ]; then
git clone -b ${params.GIT_BRANCH} ssh://root@${FORGEJO_HOST}:/rayankonecny/portal-app.git \$PROJECT_DIR
else
cd \$PROJECT_DIR
git fetch origin
git reset --hard origin/${params.GIT_BRANCH}
fi
'
"""
2025-03-25 07:56:53 -03:00
}
}
}
2026-02-02 18:22:45 -03:00
stage('Detectar Mudanças') {
2025-03-25 07:56:53 -03:00
steps {
2026-02-02 18:22:45 -03:00
sshagent(['root-ssh-key']) {
sh """
ssh root@${PODMAN_HOST} '
set -e
cd ${BASE_DIR}/${params.PROJECT_NAME}
2025-03-25 07:56:53 -03:00
2026-02-02 18:22:45 -03:00
LAST_FILE=.deploy/last_commit
CURRENT=\$(git rev-parse HEAD)
2025-03-25 07:56:53 -03:00
2026-02-02 18:22:45 -03:00
if [ -f \$LAST_FILE ]; then
PREV=\$(cat \$LAST_FILE)
else
PREV=""
fi
2025-03-25 07:56:53 -03:00
2026-02-02 18:22:45 -03:00
echo "Commit anterior: \$PREV"
echo "Commit atual: \$CURRENT"
2025-03-25 07:56:53 -03:00
2026-02-02 18:22:45 -03:00
git diff --name-only \$PREV \$CURRENT > .deploy/changed_files || true
cat .deploy/changed_files
2025-03-25 07:56:53 -03:00
2026-02-02 18:22:45 -03:00
awk -F/ "/^services/ {print \\$2}" .deploy/changed_files | sort -u > .deploy/changed_services
cat .deploy/changed_services
'
2025-03-25 07:56:53 -03:00
"""
}
}
}
2026-02-02 18:22:45 -03:00
stage('Build Inteligente (somente serviços alterados)') {
2025-03-25 07:56:53 -03:00
steps {
2026-02-02 18:22:45 -03:00
sshagent(['root-ssh-key']) {
2025-03-25 07:56:53 -03:00
sh """
2026-02-02 18:22:45 -03:00
ssh root@${PODMAN_HOST} '
set -e
cd ${BASE_DIR}/${params.PROJECT_NAME}
if [ ! -s .deploy/changed_services ]; then
echo "Nenhum serviço alterado. Pulando build."
exit 0
fi
while read SERVICE; do
echo "🔨 Buildando serviço: \$SERVICE"
podman build -t ${params.PROJECT_NAME}-\$SERVICE:latest services/\$SERVICE
done < .deploy/changed_services
'
2025-03-25 07:56:53 -03:00
"""
}
}
}
2026-02-02 18:22:45 -03:00
stage('Deploy Seletivo via podman-compose') {
2025-03-25 07:56:53 -03:00
steps {
2026-02-02 18:22:45 -03:00
sshagent(['root-ssh-key']) {
2025-03-25 07:56:53 -03:00
sh """
2026-02-02 18:22:45 -03:00
ssh root@${PODMAN_HOST} '
set -e
cd ${BASE_DIR}/${params.PROJECT_NAME}
if [ -s .deploy/changed_services ]; then
while read SERVICE; do
echo "🚀 Reiniciando serviço: \$SERVICE"
podman-compose up -d --no-deps --build \$SERVICE
done < .deploy/changed_services
else
echo "Nada para subir"
fi
git rev-parse HEAD > .deploy/last_commit
'
2025-03-25 07:56:53 -03:00
"""
}
}
}
2026-02-02 18:22:45 -03:00
stage('Observabilidade') {
2025-03-25 07:56:53 -03:00
steps {
2026-02-02 18:22:45 -03:00
sshagent(['root-ssh-key']) {
2025-03-25 07:56:53 -03:00
sh """
2026-02-02 18:22:45 -03:00
ssh root@${PODMAN_HOST} '
echo "Containers ativos:"
podman ps
'
2025-03-25 07:56:53 -03:00
"""
}
}
}
2026-02-02 18:22:45 -03:00
}
2025-03-25 07:56:53 -03:00
2026-02-02 18:22:45 -03:00
post {
success {
echo "✅ Deploy inteligente concluído para ${params.PROJECT_NAME}"
}
failure {
echo "❌ Falha no deploy"
2025-03-25 07:56:53 -03:00
}
}
}