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
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|