Guia detalhado para implementação de CI/CD utilizando Jenkins:
1. Instalação do Jenkins
1.1 Requisitos do ambiente
- Java 8 ou 11 (recomenda-se JDK11)
- Sistema operacional: Linux/Windows/macOS
1.2 Método de instalação (exemplo no Ubuntu)
# Instalação do Java
sudo apt install openjdk-11-jdk
# Adicionando o repositório do Jenkins
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
# Instalação do Jenkins
sudo apt update
sudo apt install jenkins
# Iniciando o serviço
sudo systemctl start jenkins
sudo systemctl enable jenkins
Acesse http://<IPdoServidor>:8080 para concluir a configuração inicial.
2. Configurações básicas do Jenkins
2.1 Gerenciamento de plugins
- Após o login, vá para Manage Jenkins > Plugins
- Instale os plugins necessários:
- Git Parameter
- Pipeline
- Docker
- Blue Ocean
- SSH Pipeline Steps
- Plugins de repositório de código (GitHub/GitLab)
2.2 Configuração de ferramentas
Acesse Manage Jenkins > Global Tool Configuration
- Adicione configurações de instalação automática para JDK, Maven, Gradle, etc.
- Configure o caminho do Docker (padrão
/usr/bin/docker)
3. Criação de Pipeline CI/CD
3.1 Novo tarefa Pipeline
- Crie novo Item > Selecione Pipeline
- Configure os parâmetros:
- Construção parametrizada: adicione parâmetro de branch do Git
- SCM: configure o endereço do repositório Git e credenciais
- Gatilhos: configure Webhook ou builds agendados
3.2 Exemplo de configuração de Webhook (GitHub)
- Nas configurações do repositório GitHub, adicione Webhook:
- URL do Payload:
http://<url-jenkins>/github-webhook/ - Tipo de conteúdo:
application/json
- Na tarefa do Jenkins, configure o gatilho:
- GitHub hook trigger for GITScm polling
4. Exemplo de script Pipeline (declarativo)
pipeline {
agent any
environment {
REGISTRO_DOCKER = "registro.exemplo.com"
VERSAO_PROJETO = "1.0.${BUILD_NUMBER}"
}
stages {
stage('Checkout do código') {
steps {
git branch: 'main',
url: 'https://github.com/seurepositorio/aplicacao.git'
}
}
stage('Compilação') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Testes') {
steps {
sh 'mvn test'
junit '**/target/surefire-reports/*.xml'
}
}
stage('Construção Docker') {
steps {
script {
docker.build("${REGISTRO_DOCKER}/app:${VERSAO_PROJETO}")
}
}
}
stage('Implantação em Staging') {
when {
branch 'main'
}
steps {
sshagent(['servidor-staging']) {
sh """
scp target/*.jar usuario@staging:/app/
ssh usuario@staging "sudo systemctl restart app-service"
"""
}
}
}
stage('Implantação em Produção') {
when {
expression {
return env.BRANCH_NAME == 'main' &&
currentBuild.resultIsBetterOrEqualTo('SUCCESS')
}
}
steps {
timeout(time: 15, unit: 'MINUTES') {
input message: 'Implantar em produção?', ok: 'Confirmar'
}
kubernetesApply(
kubeconfigId: 'cluster-producao',
configs: 'k8s/deployment.yaml'
)
}
}
}
post {
success {
slackSend channel: '#ci-cd',
message: "Construção ${BUILD_NUMBER} bem-sucedida ✅"
}
failure {
mail to: 'equipe@exemplo.com',
subject: "Falha na Construção ${BUILD_NUMBER}",
body: "Verifique o console de saída em ${BUILD_URL}"
}
}
}
5. Técnicas avançadas de implantação
5.1 Liberação Canary (Canary Release)
stage('Implantação Canary') {
steps {
script {
// Implantando 10% do tráfego
sh 'kubectl apply -f canary-deployment.yaml'
sleep(time: 300, unit: 'SECONDS') // Período de monitoramento
// Decisão com base nos métricas
if (metricasAPI.getTaxaErro() < 0.01) {
sh 'kubectl apply -f full-deployment.yaml'
} else {
error "Implantação Canary falhou"
}
}
}
}
5.2 Mecanismo de rollback automático
post {
failure {
script {
if (currentStage == 'producao') {
sshagent(['servidor-producao']) {
sh """
ssh usuario@prod "kubectl rollout undo deployment/app"
"""
}
}
}
}
}
6. Recomendações de segurança
- Controle de acesso:
- Use Controle de Acesso Baseado em Função (RBAC)
- Crie grupos de usuários com diferentes níveis de permissão
- Gerenciamento de credenciais:
- Use Jenkins Credentials para armazenar informações sensíveis
- Restinja o escopo das credenciais
- Logs de auditoria:
- Ative o plugin Audit Trail
- Integre ELK para análise de logs
7. Otimização de desempenho
- Construção distribuída:
- Adicione múltiplos nós Agent
- Use o plugin Kubernetes para criar Pods dinamicamente
- Estratégia de cache:
- Cache de dependências Maven/Gradle
- Cache de camadas Docker
- Execução paralela:
stage('Testes Paralelos') {
parallel {
stage('Testes Unitários') {
steps { sh './executar_testes_unitarios.sh' }
}
stage('Testes de Integração') {
steps { sh './executar_testes_integracao.sh' }
}
}
}
8. Monitoramento e alertas
- Integração com Prometheus:
- Instale o plugin Prometheus
- Configure endpoints de métricas
- Painel do Grafana:
- Monitorar taxa de sucesso de builds
- Análise de tendências de duração de builds
- Monitoramento de utilização de recursos
Solução de problemas comuns
- Builds travados:
- Verifique as configurações de memória do Jenkins Master (
JAVA_OPTS="-Xmx4g -XX:MaxRAMPercentage=70.0") - Verifique o espaço em disco (
/var/lib/jenkins)
- Falha na conexão SSH:
- Veriifque a configuração StrictHostKeyChecking em ~/.ssh/config
- Valide o formato da chave SSH (deve ser formato PEM)
- Problemas de permissão do Docker:
# Adicionar usuário Jenkins ao grupo docker
sudo usermod -aG docker jenkins
sudo systemctl restart jenkins
Com estas etapas, você pode estabelecer um fluxo de CI/CD completo, adaptando as tarefas de cada fase conforme as necessidades do seu projeto. Recomenda-se combinar com cenários de negócio específicos para gradualmente aperfeiçoar testes automatizados, análise de segurança (SAST/DAST) e controles de qualidade.