feat: commit inicial da aplicacao com pipeline
This commit is contained in:
Vendored
+127
@@ -0,0 +1,127 @@
|
||||
// ============================================================
|
||||
// JENKINSFILE — Definição do Pipeline CI/CD
|
||||
// ============================================================
|
||||
// Este arquivo é o coração do CI/CD. Ele descreve, em código,
|
||||
// TODAS as etapas que o Jenkins deve executar quando você faz
|
||||
// um "git push".
|
||||
//
|
||||
// Conceito: "Pipeline as Code" — o pipeline é versionado junto
|
||||
// com o código da aplicação. Se alguém perguntar "como o deploy
|
||||
// funciona?", a resposta está aqui.
|
||||
//
|
||||
// SINTAXE: Groovy (linguagem do Jenkins). Não precisa saber
|
||||
// Groovy — a estrutura é declarativa e autoexplicativa.
|
||||
// ============================================================
|
||||
|
||||
pipeline {
|
||||
|
||||
// "agent any" = executa em qualquer worker disponível.
|
||||
// No nosso lab, só temos um (o próprio SRVJENKINS).
|
||||
agent any
|
||||
|
||||
// Variáveis de ambiente disponíveis em todos os stages
|
||||
environment {
|
||||
REGISTRY = '10.15.1.211:5000' // Docker Registry (roda no próprio SRVJENKINS)
|
||||
APP_NAME = 'cicd-demo-app' // Nome da imagem Docker
|
||||
STAGING_IP = '10.15.1.212' // IP do SRVSTAGING
|
||||
}
|
||||
|
||||
stages {
|
||||
|
||||
// ==================================================
|
||||
// STAGE 1: Instalar Dependências
|
||||
// ==================================================
|
||||
// O Jenkins já clonou o repositório automaticamente
|
||||
// (configurado no Job). Agora instalamos as dependências
|
||||
// Node.js listadas no package.json.
|
||||
stage('Install') {
|
||||
steps {
|
||||
echo '📦 Instalando dependências (npm install)...'
|
||||
sh 'npm install'
|
||||
}
|
||||
}
|
||||
|
||||
// ==================================================
|
||||
// STAGE 2: Executar Testes
|
||||
// ==================================================
|
||||
// Roda os testes automatizados (Jest).
|
||||
// Se QUALQUER teste falhar, o pipeline PARA AQUI.
|
||||
// Código quebrado NUNCA chega ao servidor de staging.
|
||||
stage('Test') {
|
||||
steps {
|
||||
echo '🧪 Executando testes automatizados...'
|
||||
sh 'npm test'
|
||||
}
|
||||
}
|
||||
|
||||
// ==================================================
|
||||
// STAGE 3: Construir Imagem Docker
|
||||
// ==================================================
|
||||
// Cria a imagem Docker da aplicação usando o Dockerfile.
|
||||
// Gera duas tags:
|
||||
// - BUILD_NUMBER: versão específica (ex: :14)
|
||||
// - latest: sempre aponta para a versão mais recente
|
||||
stage('Build Image') {
|
||||
steps {
|
||||
echo '🐳 Construindo imagem Docker...'
|
||||
sh "docker build -t ${REGISTRY}/${APP_NAME}:${BUILD_NUMBER} ."
|
||||
sh "docker tag ${REGISTRY}/${APP_NAME}:${BUILD_NUMBER} ${REGISTRY}/${APP_NAME}:latest"
|
||||
}
|
||||
}
|
||||
|
||||
// ==================================================
|
||||
// STAGE 4: Enviar Imagem para o Registry
|
||||
// ==================================================
|
||||
// "Push" da imagem para o Docker Registry local.
|
||||
// O Registry é o "repositório de templates" — o staging
|
||||
// vai buscar a imagem de lá.
|
||||
stage('Push to Registry') {
|
||||
steps {
|
||||
echo '📤 Enviando imagem para o Registry local...'
|
||||
sh "docker push ${REGISTRY}/${APP_NAME}:${BUILD_NUMBER}"
|
||||
sh "docker push ${REGISTRY}/${APP_NAME}:latest"
|
||||
}
|
||||
}
|
||||
|
||||
// ==================================================
|
||||
// STAGE 5: Deploy no Staging
|
||||
// ==================================================
|
||||
// Conecta via SSH no SRVSTAGING e:
|
||||
// 1. Puxa a imagem mais recente do Registry
|
||||
// 2. Para e remove o container antigo (se existir)
|
||||
// 3. Sobe um novo container com a versão nova
|
||||
//
|
||||
// PREREQUISITO: A credencial 'staging-ssh-key' precisa
|
||||
// estar cadastrada no Jenkins (Manage Jenkins → Credentials)
|
||||
stage('Deploy to Staging') {
|
||||
steps {
|
||||
echo '🚀 Fazendo deploy no SRVSTAGING...'
|
||||
sshagent(credentials: ['staging-ssh-key']) {
|
||||
sh """
|
||||
ssh -o StrictHostKeyChecking=no root@${STAGING_IP} '
|
||||
docker pull ${REGISTRY}/${APP_NAME}:latest &&
|
||||
(docker stop ${APP_NAME} || true) &&
|
||||
(docker rm ${APP_NAME} || true) &&
|
||||
docker run -d \
|
||||
--name ${APP_NAME} \
|
||||
--restart unless-stopped \
|
||||
-p 3001:3000 \
|
||||
${REGISTRY}/${APP_NAME}:latest
|
||||
'
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Ações executadas APÓS o pipeline terminar
|
||||
post {
|
||||
success {
|
||||
echo '✅ Pipeline executado com sucesso!'
|
||||
echo '🌐 App disponível em: http://10.15.1.212:3001'
|
||||
}
|
||||
failure {
|
||||
echo '❌ Pipeline falhou. Verifique os logs acima.'
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user