Jenkins na prática
sem gargalos.
Construa a fundação do seu servidor de automação: domine a anatomia completa de um pipeline de Integração Contínua, a arquitetura Controller-Agent do Jenkins, a instalação rápida em Linux, Ansible ou contêiner, a gestão de plugins via CLI/HPI, o controle de acesso RBAC, as três linhas de backup e a conexão por Webhooks com o Git.
Trilha de formação: Domínio do Jenkins da arquitetura ao deploy automatizado
Como já contamos com o curso objetivo de Docker em Produção com Critério no nosso acervo, esta formação em três etapas vai direto ao coração do Jenkins e da engenharia de CI/CD, sem repetir conceitos básicos de contêineres. Você está na Etapa 1.
Percurso da Etapa 1 (Arquitetura, Instalação e Git)
Em cada oficina, você encontra a fundamentação extraída do livro de Sandeep Rawat acompanhada de scripts, configurações e diagnósticos prontos para rodar no seu ambiente.
Estruture as 3 fases do CI: verificações pré-deploy (estabilidade, SonarQube, cobertura de linha vs. condição), operações intermediárias (Nexus e Flyway) e pós-deploy.
OFICINA 02Ecossistema e arquitetura Jenkins ↗Compare pipelines integrados ao VCS, SaaS e Self-Hosted, domine a topologia Controller-Agent e inspecione a estrutura interna do diretório JENKINS_HOME.
OFICINA 03Instalação rápida (Linux, Ansible e Docker) ↗Suba o servidor Jenkins via pacotes Debian/Systemd, automatize o provisionamento com Ansible ou execute em contêiner conectado ao nosso curso de Docker.
OFICINA 04Gerenciamento avançado de plugins ↗Instale e atualize plugins pela Web UI, via linha de comando (jenkins-cli.jar) e offline via arquivos .hpi, dominando as 5 famílias essenciais de plugins.
OFICINA 05Autenticação SSO, RBAC e Simulador ↗Separe Security Realm (SSO, LDAP, banco interno) de Authorization, configure controle granular com Role-Based Strategy (RBAC) e simule o ROI da automação.
OFICINA 06Global Tool Config e 3 linhas de backup ↗Gerencie múltiplas versões de JDK, Maven, SonarScanner e Git no Global Tool Configuration e blinde o servidor com ThinBackup, JENKINS_HOME e snapshots.
OFICINA 07Estratégia de branches e pastas Jenkins ↗Elimine o gargalo da branch única com o fluxo Feature/Develop/Main/Hotfix, organize jobs com o plugin Folders e configure credenciais Git.
OFICINA 08Webhooks (Push) vs. Poll SCM e 1º Job ↗Configure gatilhos orientados a eventos via Webhook, compare com Poll SCM atrás de firewalls e gere seu primeiro estágio com o Pipeline Syntax Generator.
“A Integração Contínua não elimina os bugs por mágica, mas torna radicalmente mais fácil e rápido encontrá-los e removê-los.”
Inspirado na narrativa de The Phoenix Project, Sandeep Rawat mostra nos Capítulos 1 a 3 de CI/CD Pipeline with Docker and Jenkins como transformar uma equipe que gasta 45% do tempo apagando incêndios manuais em uma engrenagem de feedback contínuo a cada commit.Da Retrospectiva Caótica à Integração Contínua: As 3 Fases do Pipeline CI
Na retrospectiva da Sprint 1, a equipe planejou entregar três funcionalidades, mas concluiu apenas uma: a segunda quebrou no QA, a terceira nem começou e os desenvolvedores gastaram quase metade da semana compilando código manualmente e caçando bugs introduzidos por commits de colegas. Como desenhar um fluxo de Integração Contínua que estanque esse sangramento?
O Diagnóstico da Sprint 1 e o Princípio do Feedback Contínuo
Nos Capítulos 1 e 2 de CI/CD Pipeline with Docker and Jenkins, Sandeep Rawat apresenta o caso real de uma equipe construindo uma aplicação de telemedicina (video consultation app, lidando com dados pessoais e histórico médico sensível sob prazo rigoroso de 6 meses / 12 sprints). O quadro da retrospectiva da primeira sprint revela cinco dores clássicas que travam qualquer equipe sem CI/CD: 1) compilação manual lenta após cada alteração e commits de código que nem sequer compila; 2) dependências inseguras que abrem brechas graves; 3) ausência de padrões de código, gerando code smells e código duplicado; 4) testes de regressão e smoke tests executados manualmente a cada release; e 5) todos os desenvolvedores trabalhando em uma única branch compartilhada.
Como destaca o livro na Figura 2.2, sem automação os desenvolvedores chegam a gastar 45% do tempo corrigindo bugs e dívida técnica em vez de construir novas funcionalidades. A primeira decisão arquitetural tomada no Capítulo 2 é definir quando validar o código: em vez de rodar um build apenas à noite (o que obrigaria o desenvolvedor a revisar um dia inteiro de código acumulados às 19h antes de ir para casa), aplica-se o Princípio de Ouro da Integração Contínua — o Feedback Contínuo a cada commit.
A Arquitetura Completa da Integração Contínua em 3 Fases (Capítulo 2)
Para que nenhum detalhe escape antes de escrevermos a primeira linha no Jenkins, o Capítulo 2 organiza o pipeline de CI em três grandes fases sequenciais:
| Fase do Pipeline CI | Etapas Técnicas Incluídas | O que valida e por que é indispensável |
|---|---|---|
| 1. Pre-Deployment Checks (Verificações Pré-Implantação) | • Code Stability: compilação limpa do código; • Code Quality: linting, padrões, duplicação e Quality Gates (SonarQube / Checkstyle); • Unit Testing & Code Coverage: execução de testes unitários e medição de cobertura (JUnit / Cobertura / JaCoCo); • Security Testing (SAST/SCA): busca de senhas esquecidas no código, SQLi/XSS e vulnerabilidades CVE/OWASP em bibliotecas. | Impede que código que não compila, fora do padrão ou com falhas conhecidas de segurança avance. Atenção à Cobertura: uma função pode ter 90% de Line Coverage (cobertura de linhas), mas apenas 50% de Condition Coverage (cobertura de ramificações if/else)! |
| 2. Intermediate Operations (Operações Intermediárias) | • Artifact Management: empacotamento versionado e upload para repositório central (Sonatype Nexus ou JFrog Artifactory); • DB Versioning (Database as Code): versionamento de scripts DDL/DML do banco (Flyway ou Liquibase). | Evita baixar dependências repetidas da internet a cada build, permite rollback instantâneo de binários prontos e garante que o schema do banco de dados nunca fique dessincronizado entre Dev, QA e Produção. |
| 3. Post-Deployment Checks & Notifications (Pós-Implantação) | • Smoke Testing: validação rápida dos fluxos vitais (login, chamada de vídeo) via browser headless (Selenium); • API Testing: validação de status HTTP, latência, autorização e contrato JSON (SoapUI / Postman); • Intelligent Notifications: alertas direcionados no Slack, E-mail ou PagerDuty. | Pela regra de Pareto (80/20), uma boa suíte de Smoke Testing cobre 20% dos cenários mas captura até 80% dos bugs! Já os testes pesados de Regressão completa e Performance (JMeter) devem rodar em um job noturno separado para não deixar o feedback de cada commit lento. |
# Simule o portão de Pré-Deploy (Quality Gate estilo SonarQube) demonstrando por que
# medir apenas Line Coverage sem Condition Coverage deixa bugs críticos passarem:
python3 - <<'PY'
modulos = [
{"servico": "auth-service", "compila": True, "line_cov": 92, "cond_cov": 85, "cves_criticas": 0},
{"servico": "payment-service", "compila": True, "line_cov": 90, "cond_cov": 50, "cves_criticas": 0},
{"servico": "video-service", "compila": True, "line_cov": 88, "cond_cov": 82, "cves_criticas": 2}
]
for m in modulos:
falhas = []
if not m["compila"]: falhas.append("Falha de Code Stability")
if m["line_cov"] < 80: falhas.append(f"Line Coverage baixa ({m['line_cov']}%)")
if m["cond_cov"] < 75: falhas.append(f"Condition Coverage insuficiente ({m['cond_cov']}% < 75%)")
if m["cves_criticas"] > 0: falhas.append(f"{m['cves_criticas']} vulnerabilidade(s) OWASP/CVE")
status = "QUALITY GATE APROVADO" if not falhas else "BLOQUEADO: " + ", ".join(falhas)
print(f"[{m['servico']:15}] -> {status}")
PYLaboratório avançado · Por que colocar testes de carga (JMeter) e regressão completa dentro do pipeline de cada commit é um erro clássico?
No diálogo das páginas 34–35 do livro, a engenheira de QA Sonia alerta o engenheiro DevOps Abhishek sobre uma armadilha comum: se você colocar uma bateria de regressão completa e testes de estresse do JMeter (que demoram de 45 minutos a várias horas) dentro do pipeline disparado a cada git push, os desenvolvedores ficarão esperando horas na fila e passarão a burlar o processo. O pipeline de CI por commit deve ser enxuto e rápido (Estabilidade + Qualidade + Testes Unitários + Smoke Test + API Test), deixando a regressão pesada e o teste de performance agendados em um pipeline noturno dedicado.
Entrega da etapa
Mapeie o plano de Integração Contínua do seu projeto nas 3 fases do Capítulo 2: defina quais ferramentas farão as checagens de Code Stability, Code Quality, Unit/Condition Coverage e Security no pré-deploy, como serão gerenciados os artefatos e as migrações de banco (DB Versioning) e quais testes rápidos (Smoke/API) rodarão a cada commit versus na janela noturna.
Conexão com o livro · Capítulos 1 e 2 · retrospectiva da Sprint 1, princípio do feedback contínuo, Pre-Deployment Checks (Code Stability, SonarQube, Line vs. Condition Coverage, OWASP), Intermediate Operations (Nexus/JFrog e Flyway/Liquibase) e Post-Deployment Checks (Smoke Test 80/20, Regression, API Testing e Notificações).
O Panorama de Ferramentas CI/CD e a Arquitetura Interna do Jenkins
Diante de opções integradas ao Git (GitHub Actions, GitLab CI) e plataformas SaaS (CircleCI, TravisCI), quando o Jenkins auto-hospedado vence o jogo — e como funciona sua arquitetura interna entre o Controller, os Agentes e o diretório JENKINS_HOME?
VCS-Integrated vs. SaaS vs. Self-Hosted: Por que escolher o “Canivete Suíço” Jenkins?
No Capítulo 3 (Seções 3.1 e 3.2), Sandeep Rawat avalia o mercado de ferramentas de CI/CD segundo seis critérios: baixa complexidade inicial, código aberto, integrações disponíveis, independência de plataforma, builds rápidos/estáveis e suporte a Build-as-Code. O livro divide o ecossistema em três famílias:
| Categoria | Exemplos Analisados no Livro | Vantagens e Limitações Reais |
|---|---|---|
| 1. Pipelines Integrados ao VCS | GitLab CI/CD (.gitlab-ci.yml), GitHub Actions, Bitbucket Pipelines (bitbucket-pipelines.yml). | Configuração acoplada direto ao repositório onde o código mora; porém, prende seus pipelines ao provedor de Git escolhido. |
| 2. Software as a Service (SaaS) | CircleCI, TravisCI, CodeFresh, Codeship, Azure DevOps, AWS DevOps. | Zero hardware ou patches para manter no início, mas o custo infla drasticamente conforme aumentam o tamanho do time, os minutos de build e os jobs simultâneos, além de restrições de ambientes suportados. |
| 3. Self-Hosted / Open Source | Jenkins (criado em 2011 por Kohsuke Kawaguchi, escrito em Java). | Sem custo de licença por minuto ou por usuário, extensibilidade imbatível com 1.500+ plugins, distribuição fácil entre máquinas heterogêneas (Linux, Windows, macOS) e controle total de rede e segurança. |
Arquitetura Master/Controller e Agent/Slave (A Analogia do Mordomo Alfred) e o `JENKINS_HOME`
Na Seção 3.9, o autor usa uma analogia memorável da trilogia Batman: o Jenkins funciona como o mordomo Alfred. Alfred é extraordinariamente competente, mas não faz todo o trabalho pesado sozinho quando dezenas de tarefas acontecem ao mesmo tempo — ele coordena ajudantes especializados. Da mesma forma, o Jenkins opera em uma Arquitetura Distribuída Controller-Agent (Master-Slave):
- Jenkins Controller (Master): é o cérebro central. Sua função é servir a interface web HTTP (porta
8080), guardar as configurações e credenciais, monitorar gatilhos do Git, agendar os builds e despachar a execução para os agentes. Regra de produção: nunca execute compilações pesadas ou testes diretamente no nó Controller! Se um pacote quebrado corromper o sistema operacional ou consumir 100% da CPU/disco durante um build, o servidor Jenkins inteiro cai. - Jenkins Nodes / Agents (Slaves): são máquinas físicas, VMs ou contêineres efêmeros que recebem ordens do Controller (via protocolo JNLP — Java Network Launch Protocol rodando o arquivo
agent.jar/remoting.jar, via SSH ou sob demanda na nuvem/Docker/Kubernetes), executam as etapas do job em um diretório de trabalho isolado e devolvem os logs e artefatos ao Controller. Isso permite que um único Jenkins em Linux dispare builds simultâneos em agentes Linux, Windows e macOS! - A Anatomia do Diretório `JENKINS_HOME` (Seção 3.8): toda a vida do seu servidor Jenkins reside dentro de uma única árvore de diretórios (por padrão
/var/lib/jenkinsem instalações Debian/Ubuntu ou/var/jenkins_homeem contêineres):config.xml: configuração global do servidor, segurança e agentes;jobs/<nome-do-job>/: contém oconfig.xmlde cada pipeline e a subpastabuilds/com o histórico numerado de execuções, logs de console e artefatos arquivados;plugins/: todos os plugins instalados (arquivos.jpi/.hpie suas pastas extraídas);secrets/ecredentials.xml: chaves criptográficas mestras (master.keyehudson.util.Secret) que protegem todas as senhas e tokens cadastrados;workspace/: área temporária onde o código é baixado quando um job roda localmente.
# Simule um inspetor da árvore JENKINS_HOME e calcule quantos Agentes/Executors são necessários
# para zerar filas de espera mantendo 0 executors de build no nó Controller:
python3 - <<'PY'
estrutura_jenkins_home = {
"config.xml": "Configuração principal, Security Realm e definições de Nodes/Clouds",
"credentials.xml + secrets/": "Cofre criptografado de tokens Git, SSH keys e senhas (CRÍTICO PARA BACKUP)",
"jobs/": "Definições XML dos jobs/pastas e histórico de builds/logs",
"plugins/": "Pacotes .hpi/.jpi instalados do Update Center",
"workspace/": "Diretórios de checkout de código (efêmero, não incluir no backup rápido)"
}
print("Anatomia do diretório JENKINS_HOME:")
for item, desc in estrutura_jenkins_home.items():
print(f" /{item:26} -> {desc}")
# Dimensionamento de Executors: 24 builds/hora com duração média de 5 minutos (capacidade = 12 builds/hora por executor)
builds_por_hora = 24
duracao_media_min = 5
executors_necessarios = int((builds_por_hora * duracao_media_min) / 60) + 1
print(f"\nRegra de Ouro: Controller Executors = 0 | Agentes dedicados necessários: {executors_necessarios} executors paralelos")
PYLaboratório avançado · Por que você deve configurar “Number of executors = 0” no nó Built-In (Controller/Master) em produção?
Qualquer comando sh executado dentro de um pipeline que rode diretamente no nó Built-In (Master/Controller) roda com o mesmo usuário do sistema operacional que hospeda o próprio processo do Jenkins e tem acesso de leitura aos arquivos internos de $JENKINS_HOME. Ao definir o número de executores do Controller como 0 (em Manage Jenkins > Nodes > Built-In Node > Configure), você garante duas vitórias imediatas: nenhum build pesado travará a memória/CPU da interface web do Jenkins, e nenhum script de terceiros executado em um Pull Request terá acesso ao sistema de arquivos do Controller!
Entrega da etapa
Justifique a arquitetura do seu ambiente Jenkins: explique por que uma solução Self-Hosted com Jenkins atende ao seu cenário, defina a separação de responsabilidades entre o Controller (com zero executores de build) e os Agentes, e mapeie quais subpastas do JENKINS_HOME são críticas para persistência.
Conexão com o livro · Capítulo 3 (Seções 3.1, 3.2, 3.8 e 3.9) · Tooling landscape (VCS Integrated, SaaS, Self-Hosted), Why Jenkins, diretório JENKINS_HOME e arquitetura Master-Slave (Controller-Agent).
Instalação Rápida do Jenkins: Linux (Debian/Systemd), Ansible e Contêiner Docker
Como colocar um servidor Jenkins LTS no ar em menos de cinco minutos — seja diretamente em uma máquina Linux Debian/Ubuntu, provisionado sem intervenção humana via Ansible ou isolado em contêiner com volume persistente?
Método 1: Instalação Nativa em Linux (Debian / Ubuntu) e Desbloqueio Inicial
Na Seção 3.3, Sandeep Rawat demonstra que o único pré-requisito obrigatório para rodar o Jenkins é o Java (JDK). Em servidores Linux da família Debian/Ubuntu, a instalação oficial via gerenciador de pacotes configura automaticamente o serviço do sistema operacional (systemd), o usuário dedicado jenkins e o diretório /var/lib/jenkins:
- Instale o pacote do OpenJDK (nas versões LTS modernas do Jenkins, utilize Java 17 ou Java 21);
- Adicione a chave GPG oficial do repositório Jenkins e registre o repositório
debian-stableem/etc/apt/sources.list.d/jenkins.list; - Atualize o índice do
apt, instale o pacotejenkins, inicie e habilite o serviço no boot comsystemctl start/enable jenkins; - Libere a porta padrão
8080no firewall (ufw allow 8080) e acessehttp://ip_do_servidor:8080; - Na tela inicial Unlock Jenkins (Figura 3.6), leia a senha administrativa temporária gerada pelo instalador em
/var/lib/jenkins/secrets/initialAdminPassword.
Método 2: Provisionamento Automatizado com Ansible e Método 3: Subida Rápida em Docker
Para evitar repetir comandos manuais a cada novo servidor (seguindo o princípio de Infraestrutura como Código), o Capítulo 3.3.3 apresenta a automação via Ansible usando roles prontas do Ansible Galaxy (como opstree_devops.jenkins ou geerlingguy.jenkins) que já instalam o Java, o Jenkins, os plugins essenciais e as configurações globais em um único comando ansible-playbook -i hosts site.yml.
Se você prefere subir o Jenkins em segundos usando contêineres, não vamos repetir aqui a teoria de imagens, camadas OverlayFS ou redes bridge — você pode consultar todos esses fundamentos no nosso curso dedicado Docker em Produção com Critério. Abaixo, aplicamos diretamente o comando prático focado nas particularidades do Jenkins: mapear a porta web 8080, a porta JNLP de agentes 50000 e o volume nomeado para nunca perder o /var/jenkins_home!
| Método de Instalação | Comando / Artefato Principal | Quando escolher na prática |
|---|---|---|
| 1. Pacote Nativo Linux (APT / Systemd) | apt-get install jenkins + systemctl enable jenkins | Servidores ou VMs dedicadas (EC2/On-Prem) onde o Jenkins roda direto no sistema operacional gerenciado pelo Systemd. |
| 2. Automação via Ansible Playbook | ansible-galaxy install + ansible-playbook -i hosts site.yml | Ambientes corporativos onde o servidor Jenkins precisa ser recriado ou atualizado de forma idempotente via código. |
| 3. Contêiner Oficial (`jenkins/jenkins:lts-jdk17`) | Volume persistente em /var/jenkins_home + portas 8080 e 50000 | Laboratórios locais rápidos e servidores containerizados com atualização instantânea de imagem. |
# =========================================================================
# OPÇÃO A: Instalação nativa em Debian/Ubuntu (Capítulo 3.3.1 atualizado LTS)
# =========================================================================
sudo apt-get update && sudo apt-get install -y fontconfig openjdk-17-jre
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
sudo apt-get update && sudo apt-get install -y jenkins
sudo systemctl enable --now jenkins
sudo ufw allow 8080
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
# =========================================================================
# OPÇÃO B: Provisionamento automatizado com Ansible (Capítulo 3.3.3)
# =========================================================================
cat <<'EOF' > hosts
[jenkins]
10.1.1.100 ansible_ssh_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_ed25519
EOF
cat <<'EOF' > site.yml
---
- hosts: jenkins
become: yes
roles:
- opstree_devops.jenkins
EOF
# Executar com: ansible-playbook -i hosts site.yml
# =========================================================================
# OPÇÃO C: Subida rápida em Contêiner (Persistindo /var/jenkins_home)
# =========================================================================
docker run -d --name jenkins-controller \
--restart=on-failure \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home_data:/var/jenkins_home \
jenkins/jenkins:lts-jdk17
docker exec jenkins-controller cat /var/jenkins_home/secrets/initialAdminPasswordLaboratório avançado · Para que serve a porta 50000 exposta ao lado da porta 8080 no servidor Jenkins?
A porta 8080 atende o tráfego HTTP da interface web e os Webhooks recebidos do GitHub/GitLab (normalmente colocados atrás de um proxy reverso HTTPS como Nginx ou Application Load Balancer em produção). Já a porta TCP 50000 é a porta padrão de entrada para Agentes JNLP (Inbound Agents): quando um agente dinâmico (em outra VPC, no Kubernetes ou em uma máquina Windows) inicia, é o agente que abre conexão TCP na direção da porta 50000 do Controller para registrar-se e receber tarefas.
Entrega da etapa
Defina o padrão de instalação do seu servidor Jenkins: escolha qual dos três métodos (pacote Linux `systemd`, playbook `Ansible` ou contêiner `Docker` com volume persistente) você utilizará no seu laboratório e em produção, e documente os parâmetros de portas (`8080`/`50000`), versão do JDK e localização do volume de dados.
Conexão com o livro · Capítulo 3 (Seção 3.3: Jenkins Installation) · instalação em Linux (Debian/Ubuntu, systemctl, ufw 8080), instalação em Windows (serviço vs. processo local), desbloqueio com `initialAdminPassword` e automação completa via Ansible + integração com o curso de Docker.
Arquitetura de Plugins: Web UI, Jenkins-CLI, Arquivos `.hpi` Offline e as 5 Famílias Essenciais
Você precisa instalar quinze plugins padronizados via script sem clicar em menus ou atualizar um servidor Jenkins corporativo que roda em uma rede fechada sem acesso à internet. Como dominar o ecossistema de plugins do Jenkins por dentro?
O Update Center, os Arquivos `.hpi` e os 3 Métodos de Instalação (Seção 3.4)
Na Seção 3.4, Sandeep Rawat explica que o Jenkins segue uma arquitetura plug and play pura: o núcleo do servidor é enxuto e quase toda funcionalidade — de conectar ao Git até publicar relatórios HTML ou acionar agentes SSH — vem de plugins desenvolvidos em Java pela comunidade e distribuídos pelo repositório central chamado Update Center. Cada plugin é empacotado em um arquivo com extensão .hpi (ou .jpi, derivado do formato de arquivo comprimido Hemera Technologies Proprietary Image) contendo o código compilado, metadados de versão e dependências.
O livro detalha três métodos complementares para instalar e atualizar plugins:
- 1. Pela Interface Web (`Manage Jenkins > Manage Plugins`): dividida em quatro abas — Updates (plugins instalados que possuem versão mais nova no Update Center), Available (catálogo para buscar e instalar novos plugins), Installed (inventário atual) e Advanced (configuração de proxy HTTP, URL customizada de Update Center e upload manual de arquivo
.hpi). Recomendação de ouro do livro (página 51): embora exista o botão Install without restart, prefira sempre reiniciar o serviço do Jenkins após instalar ou atualizar plugins estruturais (Download now and install after restart), pois muitos plugins só carregam seus ganchos de memória corretamente após o reinício! - 2. Pela Linha de Comando (`jenkins-cli.jar` / `jenkins-plugin-cli`): ideal para engenheiros DevOps que automatizam a criação do servidor por scripts. Você baixa o cliente
jenkins-cli.jardiretamente do seu próprio servidor (emhttp://seu_jenkins:8080/jnlpJars/jenkins-cli.jar) e executa o subcomandoinstall-pluginpassando as flags-deploy(instalar imediatamente) ou-restart(reiniciar após concluir). - 3. Instalação Offline / Sem Internet via Arquivo `.hpi` (Seção 3.4.3): quando o servidor Jenkins roda em uma rede corporativa isolada sem acesso externo ao Update Center, você baixa o arquivo
<plugin>.hpiem uma máquina autorizada (a partir dehttps://updates.jenkins-ci.org/download/plugins/), valida sua integridade e o instala fazendo upload na aba Manage Plugins > Advanced > Deploy Plugin ou copiando o arquivo.hpidiretamente para o diretório$JENKINS_HOME/plugins/e reiniciando o serviço.
As 5 Categorias de Plugins Indispensáveis no Dia a Dia (Seção 3.5)
Entre os mais de 1.500 plugins disponíveis, o Capítulo 3 seleciona o conjunto essencial que estrutura qualquer servidor profissional:
| Categoria Funcional | Plugins Principais (ID Oficial) | Problema Real que Resolvem |
|---|---|---|
| 1. Source Code Management | git, workflow-scm-step | Espinha dorsal do servidor: clona repositórios via SSH/HTTPS, gerencia branches parametrizadas, Poll SCM e gatilhos de Pull Request. |
| 2. User Interface & Organização | cloudbees-folder (Folders), blueocean, pipeline-stage-view | O plugin Folders cria pastas e subpastas hierárquicas por equipe ou ambiente (evitando centenas de jobs misturados na tela inicial); o Blue Ocean / Stage View exibe cada etapa e linha de erro com precisão visual. |
| 3. Administration & Agentes | ssh-slaves, windows-slaves, audit-trail, thinBackup | Conecta agentes Linux via SSH (`remoting.jar`), agentes Windows e grava logs de auditoria de todas as ações feitas por usuários no servidor (Audit Trail). |
| 4. Build Management & Qualidade | warnings-ng (Warnings Next Generation), htmlpublisher, sonar, nexus-artifact-uploader | Coleta e plota gráficos de análise estática (Checkstyle, PMD, FindBugs, JUnit), publica relatórios HTML (como OWASP Dependency-Check) e centraliza a integração com o SonarQube e o Nexus. |
| 5. Pipelines & Notifications | workflow-aggregator (Pipeline), pipeline-utility-steps, slack, email-ext | Habilita pipelines como código em Groovy (`Jenkinsfile`) e dispara alertas customizados por evento para canais do Slack, Microsoft Teams ou templates de e-mail. |
# 1. Comandos para baixar o jenkins-cli.jar e instalar o pacote essencial de plugins com restart:
# wget http://localhost:8080/jnlpJars/jenkins-cli.jar
# java -jar jenkins-cli.jar -s http://localhost:8080 -auth admin:SEU_API_TOKEN \
# install-plugin git cloudbees-folder workflow-aggregator warnings-ng htmlpublisher sonar audit-trail thinBackup slack email-ext -restart
# 2. Validador em Python para auditar se todos os plugins obrigatórios das 5 famílias estão presentes:
python3 - <<'PY'
plugins_obrigatorios = {
"SCM": ["git", "workflow-scm-step"],
"UI": ["cloudbees-folder", "pipeline-stage-view"],
"Admin": ["ssh-slaves", "audit-trail", "thinBackup"],
"Build": ["warnings-ng", "htmlpublisher", "sonar"],
"Pipeline_Notify": ["workflow-aggregator", "pipeline-utility-steps", "slack", "email-ext"]
}
total = sum(len(v) for v in plugins_obrigatorios.values())
print(f"Manifesto Base de Produção validado ({total} plugins essenciais em 5 categorias):")
for cat, lista in plugins_obrigatorios.items():
print(f" [{cat:15}] -> {', '.join(lista)}")
PYLaboratório avançado · Qual é o risco de instalar dezenas de plugins órfãos ou desnecessários no Jenkins?
Embora o ecossistema de plugins seja a maior força do Jenkins, cada plugin instalado roda dentro da mesma JVM do Controller, adiciona dependências transitivas e amplia a superfície de ataque de segurança (Capítulo 10 de Engenharia de Dados!). Mantenha apenas os plugins efetivamente utilizados pelos seus pipelines, audite mensalmente a aba Updates para corrigir avisos de segurança exibidos no topo do painel do Jenkins e teste atualizações de plugins antes de aplicá-las no servidor de produção.
Entrega da etapa
Monte a lista oficial de plugins do seu servidor Jenkins: selecione quais plugins de cada uma das 5 categorias farão parte da sua imagem/instalação base e defina qual método de instalação (Jenkins-CLI automatizado ou arquivos `.hpi` verificados) será usado para manter o ambiente reproduzível.
Conexão com o livro · Capítulo 3 (Seções 3.4 e 3.5: Plugins) · Update Center, formato `.hpi`, instalação via Web UI, Jenkins-CLI e arquivos `.hpi` offline, e plugins de SCM (Git), UI (Folders, BlueOcean), Administração (Agents, AuditTrail), Build Management (Warnings-NG, HTML Publisher, SonarScanner) e Notificações (Slack, Email-ext).
Segurança no Jenkins: Autenticação (Security Realm), Autorização RBAC e Simulador de ROI
Por que deixar o Jenkins com a opção “Logged-in users can do anything” ativada transforma qualquer conta de estagiário ou desenvolvedor em um superadministrador capaz de ler segredos de produção e apagar pipelines de outros times?
Autenticação (Trancar o Portão) vs. Autorização (Trancar os Cômodos e Gavetas)
Na Seção 3.6, Sandeep Rawat enfatiza por que a segurança do Jenkins exige atenção máxima: o Jenkins senta exatamente no meio da infraestrutura com acesso ao código-fonte, aos repositórios de artefatos, aos bancos de dados e aos servidores de produção, além de guardar senhas, tokens e chaves privadas. O livro divide a blindagem em dois domínios independentes configurados em Manage Jenkins > Configure Global Security:
- 1. Authentication (Autenticação — O *Security Realm*): define quem pode fazer login no Jenkins. As opções suportadas incluem:
- Jenkins’ own user database (Banco próprio do Jenkins): simples para times pequenos, mas jamais marque a caixa “Allow users to sign up” (o administrador deve controlar toda criação de conta);
- LDAP / Active Directory e Unix User/Group Database: centraliza usuários em diretórios corporativos;
- Identity Provider Plugins / Single Sign-On (SSO — Google Login, GitHub OAuth, SAML/Okta): a recomendação número um para ambientes de produção, pois elimina senhas duplicadas, impõe MFA centralizado e desativa o acesso instantaneamente quando alguém sai da empresa.
- 2. Authorization (Autorização — O que cada usuário autenticado pode fazer): os modos “Anyone can do anything”, “Legacy mode” e “Logged-in users can do anything” nunca devem ser usados em produção. Para controle granular real, o Capítulo 3 compara duas estratégias avançadas:
- Matrix-based Security / Project-based Matrix Authorization: atribui permissões granulares em uma tabela (Overall, Credentials, Agent, Job, Run, View, SCM), permitindo no modo Project-based definir listas de controle de acesso (ACLs) específicas por projeto;
- Role-Based Authorization Strategy (RBAC — Recomendação de Ouro do Livro): em vez de dar permissões usuário por usuário, você cria Papéis (Roles) em
Manage Jenkins > Manage and Assign Rolesdivididos em Global Roles (ex.:admin,viewer_global) e Item / Project Roles baseadas em expressões regulares sobre o nome da pasta/job (ex.: o papeldev_pagamentocom padrão^Pagamentos/.*permite criar e disparar apenas jobs dentro da pastaPagamentos/!).
| Papel (Role RBAC) | Tipo e Padrão Regex | Permissões Concedidas (Menor Privilégio) |
|---|---|---|
| `devops-admin` | Global Role | Acesso administrativo completo ao Controller, plugins, credenciais globais e nós agentes. |
| `authenticated-read` | Global Role | Apenas Overall/Read para permitir carregar o painel inicial e ver apenas as pastas autorizadas pelas Project Roles. |
| `squad-backend` | Item Role (Padrão: ^Backend/.*) | Job/Read, Job/Build, Job/Cancel e Job/Workspace restritos exclusivamente aos pipelines da pasta Backend/. |
| `qa-release` | Item Role (Padrão: ^(QA|Release)/.*) | Permissão para disparar baterias de testes e aprovar estágios de promoção nos ambientes de homologação. |
# Teste suas expressões regulares (Regex) do plugin Role-Based Authorization Strategy
# antes de aplicá-las no Jenkins para garantir que uma squad nunca enxergue ou dispare jobs de outra:
python3 - <<'PY'
import re
jobs_no_servidor = [
"Backend/api-pagamentos-ci",
"Backend/servico-video-ci",
"Frontend/web-portal-ci",
"Infra/terraform-prod-deploy"
]
item_roles = {
"role_backend_dev": r"^Backend/.*",
"role_frontend_dev": r"^Frontend/.*",
"role_sre_infra": r"^Infra/.*"
}
for role, padrao in item_roles.items():
regex = re.compile(padrao)
liberados = [j for j in jobs_no_servidor if regex.match(j)]
print(f"Papel RBAC '{role:17}' (Regex: {padrao:14}) -> Acesso permitido a: {liberados}")
PYSimulador de Eficiência e Retorno da Automação CI no Jenkins
Calcule o ganho líquido mensal ao automatizar builds, testes e validações de qualidade no Jenkins, economizando horas da equipe e barrando bugs antes do QA/Produção.
Laboratório avançado · Por que combinar RBAC com o plugin Audit Trail é obrigatório em ambientes regulados?
Mesmo com RBAC restrito por pasta, em uma auditoria ou investigação de incidente você precisa responder com precisão: “Quem alterou a configuração do job de deploy na terça-feira às 16h12 ou quem clicou em Build with Parameters para produção?” O plugin Audit Trail intercepta todas as requisições administrativas e de execução no Jenkins e grava em arquivo de log rotacionado (ou envia ao syslog/SIEM) o usuário autenticado via SSO, o endereço IP, o timestamp exato e a URI acionada.
Entrega da etapa
Defina a matriz de segurança do seu servidor Jenkins: escolha o provedor de Autenticação (Security Realm / SSO), desenhe os papéis globais e de projeto (com as respectivas expressões regulares de pastas) na Role-Based Authorization Strategy e registre a simulação de retorno obtida na calculadora acima.
Conexão com o livro · Capítulo 3 (Seção 3.6: Authentication and Authorization) · Security Realm (Basic Auth, Servlet, LDAP, Unix, SSO) e Authorization (Matrix-based, Project-based Matrix e a recomendação de produção SSO + Role-Based Authorization Strategy).
Global Tool Configuration e as 3 Linhas de Defesa em Backup (`ThinBackup` e `JENKINS_HOME`)
Um projeto legado exige JDK 8 com Maven 3.6, enquanto o novo microsserviço exige JDK 21 com Maven 3.9 — e um comando errado no terminal ameaça apagar o servidor Jenkins inteiro. Como gerenciar múltiplas ferramentas e blindar o servidor com três camadas de backup?
Global Tool Configuration: Múltiplas Versões de JDK, Maven, SonarScanner e Docker (Seção 3.10)
Na Seção 3.10, Sandeep Rawat apresenta o painel Global Tool Configuration (acessado em Manage Jenkins > Tools / Global Tool Configuration). Em vez de instalar uma única versão global de compilador no sistema operacional e travar todos os times na mesma versão, o Jenkins permite declarar múltiplas instalações nomeadas de JDK, Git, Maven, Gradle, Ant, SonarQube Scanner, Snyk e Docker:
- Você pode apontar para um caminho já instalado nos agentes (ex.:
/usr/lib/jvm/java-17-openjdk-amd64) ou marcar a opção Install automatically (Instalar automaticamente), fazendo com que o Jenkins baixe e extraia a versão exata da ferramenta sob demanda no nó agente apenas para o job que a solicitou! - Assim, o Job A declara
tools { jdk 'jdk-8'; maven 'maven-3.6' }e o Job B declaratools { jdk 'jdk-21'; maven 'maven-3.9' }no mesmo servidor sem nenhum conflito.
“E se o servidor for deletado?” As 3 Linhas de Segurança em Backup (Seção 3.8)
Na Seção 3.8 (páginas 67–70), o livro lembra uma verdade dura: “Um crash do Jenkins sem backup custa um dia e uma noite inteiros de trabalho para colocar tudo no ar novamente.” Como o servidor Jenkins guarda todas as integrações, usuários, credenciais e históricos da empresa, Rawat estrutura três linhas de segurança complementares:
| Linha de Defesa | Como Configurar na Prática | O que protege e Velocidade de Restore |
|---|---|---|
| 1ª Linha: Plugin `ThinBackup` (Backup Seletivo Inteligente) | Instale o plugin ThinBackup, acesse Manage Jenkins > ThinBackup > Settings, defina o diretório de destino (gravável pelo usuário jenkins) e a agenda cron para backups completos (FULL) e diferenciais (DIFF). | Salva apenas o que importa (configurações XML de sistema, jobs, plugins e credenciais) em poucos megabytes e restaura tudo pela própria interface em ThinBackup > Restore! |
| 2ª Linha: Arquivo do `JENKINS_HOME` (Backup Direto de Sistema de Arquivos) | Script automatizado que compacta os arquivos essenciais de $JENKINS_HOME (excluindo caches e pastas gigantes de workspace/) e envia para um armazenamento externo (S3/NFS). | Permite levantar um novo contêiner ou VM do zero simplesmente restaurando o conteúdo de JENKINS_HOME no disco antes de iniciar o serviço. |
| 3ª Linha: Imagem do Servidor / Snapshot (Clone de Disco / AMI / EBS Snapshot) | Snapshot automatizado do volume de bloco (EBS/Persistent Disk) ou imagem completa da máquina virtual na nuvem. | Recuperação de desastres completa (Disaster Recovery) caso o disco físico ou o sistema operacional do servidor inteiro seja corrompido. |
# Veja como criar um script de backup enxuto do JENKINS_HOME (2ª Linha de Defesa do Capítulo 3.8)
# que preserva todas as configurações, jobs, plugins e chaves criptográficas ignorando workspaces pesados:
python3 - <<'PY'
script_backup_sh = """#!/usr/bin/env bash
set -euo pipefail
JENKINS_HOME="${JENKINS_HOME:-/var/lib/jenkins}"
BACKUP_DIR="/backup/jenkins"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
mkdir -p "$BACKUP_DIR"
# Compacta configs XML, jobs (sem workspaces temporários), usuários, plugins e segredos mestres:
tar -czf "$BACKUP_DIR/jenkins_home_${TIMESTAMP}.tar.gz" \\
--exclude="workspace/*" \\
--exclude="caches/*" \\
--exclude="war/*" \\
-C "$JENKINS_HOME" \\
config.xml credentials.xml secret.key secret.key.not-so-secret \\
secrets/ users/ jobs/ nodes/ plugins/*.jpi plugins/*.hpi
echo "Backup concluído: $BACKUP_DIR/jenkins_home_${TIMESTAMP}.tar.gz"
"""
print(script_backup_sh)
PYLaboratório avançado · Por que um backup de `credentials.xml` não serve para nada se você esquecer de copiar a pasta `secrets/`?
Dentro do arquivo $JENKINS_HOME/credentials.xml, todas as senhas, chaves privadas SSH e tokens de API estão criptografados. As chaves que descriptografam esse cofre são o arquivo $JENKINS_HOME/secrets/master.key e o arquivo $JENKINS_HOME/secrets/hudson.util.Secret. Se você fizer backup apenas dos arquivos .xml e perder a pasta secrets/, ao restaurar o backup em um novo servidor o Jenkins não conseguirá descriptografar nenhuma credencial e todos os pipelines falharão até que você recadastre cada senha manualmente!
Entrega da etapa
Estruture o plano de ferramentas e continuidade do seu servidor Jenkins: liste quais versões de JDK, Maven/Node/Python e SonarScanner serão registradas no Global Tool Configuration e defina a agenda e o destino das suas 3 linhas de backup (ThinBackup, arquivamento do `JENKINS_HOME` com `secrets/` e snapshot de volume).
Conexão com o livro · Capítulo 3 (Seções 3.8: What If the Server Gets Deleted — ThinBackup, JENKINS_HOME backup e Server Image; e 3.10: Global Tool Configuration — JDK, Maven, SonarScanner, Snyk e Docker).
Estratégia de Branching, Organização com Pastas (`Folders`) e Conexão com o Git
Se dez desenvolvedores fazem push diretamente na mesma branch e você tem cinquenta jobs espalhados na tela inicial do Jenkins, cada deploy vira uma roleta-russa. Como alinhar a estratégia de ramificação do Git à hierarquia de jobs no Jenkins?
A Estratégia de Branching para CI/CD sem Conflitos (Seção 2.6, Figura 2.10)
Na Seção 2.6 do Capítulo 2, o líder de desenvolvimento Adeel confessa o motivo pelo qual a equipe perdia horas resolvendo conflitos de merge e não conseguia fazer rollback: todo mundo desenvolvia, corrigia bugs e fazia deploy a partir de uma única branch! Para resolver isso sem criar uma burocracia excessiva de dezenas de branches aninhadas, Abhishek e Adeel definem o fluxo pragmático da Figura 2.10 (que complementa perfeitamente o que estudamos na nossa trilha Git com Critério — Etapa 2):
- Feature Branches (`feature/*`): criadas a partir da branch
developpara cada nova funcionalidade. Ao abrir um Pull Request paradevelop, o Jenkins executa automaticamente os Pre-Deployment Checks (compilação, Checkstyle/SonarQube, testes unitários e OWASP); - Development Branch (`develop`): quando o Pull Request é aprovado e mesclado na
develop, o pipeline de CI do Jenkins gera o artefato versionado, envia ao Nexus, aplica as migrações de banco com Flyway e faz o deploy automático no ambiente de Desenvolvimento/QA seguido de Smoke Tests; - Master / Main Branch (`main` / `master`): após validação em homologação, um Pull Request promove o código para a
main, disparando o fluxo de entrega para Produção; - Hotfix Branches (`hotfix/*`): se surgir um bug crítico em produção, cria-se a branch
hotfix/*diretamente a partir damain; após passar pelo pipeline do Jenkins e corrigir produção, as branchesdevelopefeature/*puxam (pull) a correção imediatamente.
Organizando o Servidor com `Folders` e Configurando o Plugin Git (Capítulos 3.5 e 4.1)
Antes de criar jobs soltos na tela inicial do Jenkins, o Capítulo 3.5.2 recomenda usar o plugin Folders (`cloudbees-folder`) para criar diretórios hierárquicos por projeto, squad ou estágio (por exemplo: CI/, CD-QA/, CD-Prod/ ou Obvis/Backend/). Dentro da pasta, você conecta o job ao seu repositório Git definindo:
| Configuração no Plugin Git | Como configurar em Produção | Benefício Técnico |
|---|---|---|
| Repository URL & Credentials | URL HTTPS (com Personal Access Token cadastrado como Username with password no cofre do Jenkins) ou URL SSH (com chave privada SSH Username with private key). | Nunca exponha tokens na própria URL do repositório; referencie sempre o credentialsId seguro do Jenkins. |
| Branches to build | Especifique */main, */develop ou use um Multibranch Pipeline (que descobre automaticamente toda branch e Pull Request que contenha um Jenkinsfile!). | Garante que cada branch acione exatamente a rotina correspondente ao seu ambiente. |
| Additional Behaviours (Clone Options) | Habilite Shallow clone (depth: 1) e timeout explícito quando o repositório tiver anos de histórico pesado que o build não precisa inspecionar. | Reduz o tempo de Code Checkout de minutos para poucos segundos e economiza disco nos agentes. |
# Veja como o Jenkins decide automaticamente quais estágios executar com base na branch do Git
# seguindo a estratégia de Branching da Figura 2.10 do livro:
python3 - <<'PY'
branches_evento = ["feature/login-video", "develop", "hotfix/corrige-timeout", "main"]
for br in branches_evento:
estagios = ["1. Checkout", "2. Code Stability", "3. Code Quality (Sonar)", "4. Unit & OWASP Tests"]
if br == "develop":
estagios += ["5. Upload Artifact (Nexus)", "6. Deploy Dev + Flyway DB", "7. Smoke & API Tests"]
elif br.startswith("hotfix/") or br == "main":
estagios += ["5. Release Artifact", "6. Deploy Staging/Prod", "7. Smoke Test + Slack Alert"]
print(f"Branch: {br:24} -> Estágios acionados: {' -> '.join(estagios)}")
PYLaboratório avançado · Quando usar um Job Pipeline tradicional vs. um Multibranch Pipeline (Seção 4.1.7)?
Em um job do tipo Pipeline simples, você aponta para uma branch específica (ou passa a branch como parâmetro manual). Já no Multibranch Pipeline (apresentado pelo autor nas páginas 87–89), você aponta apenas para a URL do repositório Git: o Jenkins escaneia todas as branches e Pull Requests e cria automaticamente um sub-job para cada branch que possua um arquivo Jenkinsfile na raiz, arquivando sozinho os sub-jobs quando a branch de feature é deletada após o merge!
Entrega da etapa
Estruture a organização de pastas e branches do seu projeto: desenhe a árvore de pastas (Folders) que você criará no Jenkins, defina a política de branches (feature/*, develop, main, hotfix/*) e especifique como o repositório Git será autenticado e clonado.
Conexão com o livro · Capítulos 2 (Seção 2.6: Branching Strategy), 3 (Seção 3.5: Git e Folders Plugins) e 4 (Seção 4.1.7: Converting Multibranch Pipeline).
Gatilhos Push vs. Pull: Webhooks, Poll SCM e o Primeiro Job com Pipeline Syntax Generator
Como fazer o Jenkins iniciar o build no exato segundo em que um desenvolvedor executa git push no GitHub ou GitLab — e o que fazer quando o servidor Jenkins está atrás de um firewall corporativo que bloqueia conexões externas?
Mecanismo Push-Based (Webhooks) vs. Pull-Based (Poll SCM) (Capítulo 2, Página 19)
Na página 19 do Capítulo 2, Abhishek, Adeel e Sonia discutem uma decisão arquitetural que todo engenheiro precisa dominar ao conectar o Git ao Jenkins: como o servidor de CI descobre que há um novo commit no repositório? Existem dois mecanismos fundamentais:
| Mecanismo de Gatilho | Como funciona nos bastidores | Quando usar e Sintaxe no Jenkins |
|---|---|---|
| 1. Push-Based (`GitHub / GitLab Webhook`) (Recomendado como padrão) | Você cadastra a URL de webhook do Jenkins (ex.: https://jenkins.empresa.com/github-webhook/) nas configurações do repositório Git. A cada git push ou Pull Request, o próprio servidor Git envia um payload HTTP POST em JSON avisando o Jenkins. | Zero carga ociosa no servidor Jenkins e início instantâneo (menos de 1 segundo após o commit). No job, basta marcar GitHub hook trigger for GITScm polling. |
| 2. Pull-Based (`Poll SCM`) (Alternativa atrás de Firewalls) | O servidor Jenkins consulta periodicamente o repositório Git remoto em uma agenda estilo cron para perguntar se o hash do último commit mudou; se mudou, inicia o build. | Usado quando o Jenkins roda em uma rede interna privada onde o firewall bloqueia chamadas de entrada vindas do GitHub/GitLab na nuvem. Use sempre o símbolo H (Hash) no cron do Jenkins (ex.: H/5 * * * *) para espalhar a carga entre os minutos! |
Gerando seu Primeiro Pipeline com o Pipeline Syntax Generator (Capítulo 4.1)
Na Seção 4.1 (páginas 77–81), Sandeep Rawat ensina a regra número um antes de automatizar qualquer etapa no Jenkins: sempre execute e valide os comandos primeiro no terminal de uma máquina de desenvolvimento (PoC) antes de colocá-los no pipeline. Uma vez validados, você não precisa decorar a sintaxe Groovy de cada plugin de cabeça: o Jenkins inclui o Pipeline Syntax (Snippet Generator) (Figura 3.26 e 4.6), que gera o bloco de código exato ao preencher o formulário na tela!
Abaixo estão os dois formatos fundamentais de código que o Jenkins utiliza (e que aprofundaremos ao máximo na Etapa 2): a sintaxe Scripted Pipeline (mostrada nos primeiros exemplos do Capítulo 4 com node("master")) e a sintaxe moderna Declarative Pipeline (recomendada com pipeline { agent any ... }), já realizando o Code Checkout e a verificação inicial de Code Stability:
// =========================================================================
// 1. SINTAXE DECLARATIVA MODERNA (Recomendada para o seu Jenkinsfile)
// =========================================================================
pipeline {
agent any
triggers {
// Recebe evento instantâneo via Push (Webhook) ou verifica a cada 5 min com H (Hash)
githubPush()
pollSCM('H/5 * * * *')
}
stages {
stage('1. Cloning Project (Code Checkout)') {
steps {
git branch: 'main',
credentialsId: 'git-token-cred',
url: 'https://github.com/bpbpublications/CI-CD-Simplified.git'
}
}
stage('2. Code Stability (Compilation Check)') {
steps {
sh 'mvn clean compile -DskipTests'
}
}
}
}
// =========================================================================
// 2. EQUIVALENTE SCRIPTED PIPELINE (Capítulo 4.1 do livro)
// =========================================================================
node('linux-agent') {
stage('Cloning Spring3Hibernate Project') {
git url: 'https://github.com/bpbpublications/CI-CD-Simplified'
}
stage('Code Stability') {
sh 'mvn clean install -DskipTests'
}
}Laboratório avançado · Por que usar `H/5 * * * *` em vez de `*/5 * * * *` nas expressões cron do Jenkins?
Se você tiver 100 jobs configurados com */5 * * * *, todos os 100 jobs tentarão consultar o servidor Git exatamente no segundo zero dos minutos 00, 05, 10, 15..., causando um pico artificial de CPU e rede a cada 5 minutos. No Jenkins, a letra H (de Hash) calcula um deslocamento determinístico baseado no hash do nome do job: assim, H/5 * * * * continua executando a cada 5 minutos para cada job, mas distribui as consultas uniformemente ao longo dos 5 minutos!
Entrega da etapa
Configure o gatilho e o primeiro job da sua trilha Jenkins: defina se o seu ambiente usará Webhook (Push) ou Poll SCM com `H` (Pull), escreva o bloco inicial de Code Checkout e Code Stability para o seu repositório e descreva como você validou a execução no Stage View / Console Output.
Conexão com o livro · Capítulos 2 (Seção 2.2: Pull-based vs. Push-based mechanism), 3 (Seção 3.7: Scripted vs. Declarative Pipeline e Pipeline Syntax Generator) e 4 (Seções 4.1.1 e 4.1.2: Code Checkout e Code Stability).
Projeto prático e caderno da Etapa 1
Consolide a arquitetura, instalação, segurança, backup e integração Git do seu servidor Jenkins (Capítulos 1 a 3 e início do Capítulo 4 de Sandeep Rawat), valide suas decisões técnicas e exporte seu caderno completo antes de avançar para a Etapa 2.
Suas anotações nas 8 oficinas
Documento de Arquitetura e Fundação do Servidor Jenkins (Etapa 1)
Estruture o blueprint de implantação do seu servidor Jenkins em quatro blocos:
Checklist de domínio da Etapa 1
Marque os itens que você já validou antes de avançar para a Etapa 2:
Referências bibliográficas e conexões com o acervo (Capítulos 1 a 4)
RAWAT, Sandeep. CI/CD Pipeline with Docker and Jenkins: Learn How to Build and Manage Your CI/CD Pipelines Effectively. London: BPB Publications, 2023. ISBN 978-93-55513-502 (Capítulo 1: Introduction; Capítulo 2: Continuous Integration; Capítulo 3: Introduction to Jenkins; Capítulo 4: CI with Jenkins). Obras complementares citadas no livro: KIM, Gene; BEHR, Kevin; SPAFFORD, George (The Phoenix Project, IT Revolution Press). Cursos integrados no acervo Ateliê da Tecnologia: Docker em Produção com Critério e Trilha Git com Critério (Etapas 1 a 4).