Implementando uma Esteira CI/CD com Docker, Jenkins e AWS EKS
A adoção de práticas de Continuous Integration (CI) e Continuous Deployment (CD) tem se tornado essencial para equipes de desenvolvimento que buscam agilidade, qualidade e eficiência no processo de entrega de software. Neste artigo, vamos explorar como criar uma esteira CI/CD utilizando Docker, Jenkins e AWS Elastic Kubernetes Service (EKS). Vamos abordar cada componente em detalhes e fornecer exemplos práticos para ilustrar o processo.
Introdução ao CI/CD
O CI/CD é uma metodologia que visa automatizar o processo de integração e entrega de código. Ao integrar continuamente as mudanças no código-fonte e implantá-las automaticamente em um ambiente de produção, as equipes podem reduzir o tempo de ciclo de desenvolvimento, melhorar a qualidade do software e aumentar a confiança na entrega de novas funcionalidades.
Componentes da Esteira CI/CD
Para construir uma esteira CI/CD robusta, precisamos de alguns componentes-chave:
- Docker: Um sistema de containerização que permite empacotar aplicações e suas dependências em imagens, facilitando a implantação em diferentes ambientes.
- Jenkins: Uma ferramenta de automação de software de código aberto que permite orquestrar tarefas de construção, teste e implantação.
- AWS EKS: Um serviço gerenciado da Amazon Web Services que facilita a execução de aplicações em contêineres usando o Kubernetes.
Configurando o Docker
O Docker é fundamental para criar ambientes consistentes e reproduzíveis para nossas aplicações. Vamos começar configurando um Dockerfile para nossa aplicação.
Criando um Dockerfile
Um Dockerfile é um script que contém instruções para construir uma imagem Docker. Aqui está um exemplo simples para uma aplicação Node.js:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Este Dockerfile inicia a partir da imagem oficial do Node.js, define o diretório de trabalho, copia os arquivos de configuração, instala as dependências, copia o código-fonte e expõe a porta 3000.
Construindo e Executando a Imagem Docker
Para construir a imagem Docker, use o seguinte comando:
docker build -t minha-app .
E para executar o contêiner:
docker run -p 3000:3000 minha-app
Configurando o Jenkins
O Jenkins é uma ferramenta poderosa para automatizar tarefas de CI/CD. Vamos configurá-lo para construir e testar nossa aplicação sempre que houver uma mudança no repositório.
Instalando o Jenkins
Você pode instalar o Jenkins em sua própria máquina ou usar um serviço gerenciado como o Jenkins X. Para este exemplo, vamos supor que você já tenha o Jenkins instalado e configurado.
Criando um Pipeline no Jenkins
Um pipeline no Jenkins é um conjunto de tarefas que são executadas em sequência. Vamos criar um pipeline para construir, testar e implantar nossa aplicação.
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t minha-app .'
}
}
stage('Test') {
steps {
sh 'docker run minha-app npm test'
}
}
stage('Deploy') {
steps {
sh 'docker push minha-app:latest'
sh 'kubectl apply -f deployment.yaml'
}
}
}
}
Este pipeline define três estágios: Build, Test e Deploy. No estágio Build, ele constrói a imagem Docker. No estágio Test, ele executa os testes dentro do contêiner. No estágio Deploy, ele envia a imagem para um registro Docker e aplica um manifesto Kubernetes para implantar a aplicação no EKS.
Configurando o AWS EKS
O AWS EKS é um serviço gerenciado que facilita a execução de aplicações em contêineres usando o Kubernetes. Vamos configurar um cluster EKS e implantar nossa aplicação nele.
Criando um Cluster EKS
Para criar um cluster EKS, você pode usar a AWS Management Console, a CLI da AWS ou o CloudFormation. Aqui está um exemplo usando a CLI da AWS:
eksctl create cluster --name meu-cluster --region sa-east-1 --nodes 2
Este comando cria um cluster EKS chamado “meu-cluster” na região “sa-east-1” com 2 nós.
Configurando o kubectl
Para interagir com o cluster EKS, você precisa configurar o kubectl
:
aws eks --region sa-east-1 update-kubeconfig --name meu-cluster
Este comando atualiza o arquivo de configuração do kubectl
para apontar para o cluster EKS.
Criando um Deployment no Kubernetes
Um deployment no Kubernetes é uma abstração que gerencia um conjunto de pods idênticos. Vamos criar um deployment para nossa aplicação:
apiVersion: apps/v1
kind: Deployment
metadata:
name: minha-app
spec:
replicas: 3
selector:
matchLabels:
app: minha-app
template:
metadata:
labels:
app: minha-app
spec:
containers:
- name: minha-app
image: 123456789012.dkr.ecr.sa-east-1.amazonaws.com/minha-app:latest
ports:
- containerPort: 3000
Este deployment cria 3 réplicas do contêiner “minha-app” usando a imagem armazenada no Amazon ECR.
Integrando Tudo
Agora que temos todos os componentes configurados, vamos integrar tudo para criar uma esteira CI/CD completa.
Fluxo de Trabalho Completo
- Um desenvolvedor faz uma mudança no código-fonte e envia uma pull request para o repositório.
- O Jenkins detecta a mudança e inicia um pipeline.
- O pipeline constrói a imagem Docker, executa os testes e, se tudo estiver correto, envia a imagem para o Amazon ECR.
- O pipeline aplica o deployment no Kubernetes, atualizando as réplicas do contêiner no cluster EKS.
- A aplicação é implantada e pronta para uso.
Conclusão
Neste artigo, exploramos como criar uma esteira CI/CD utilizando Docker, Jenkins e AWS EKS. Ao automatizar o processo de construção, teste e implantação, podemos entregar software de forma mais rápida, confiável e eficiente. Com as práticas de CI/CD, as equipes podem se concentrar em inovar e melhorar continuamente suas aplicações.
Palavras-chave
CI/CD, Continuous Integration, Continuous Deployment, Docker, Jenkins, AWS EKS, Kubernetes, DevOps, automação, pipeline, deployment, containerização, Amazon Web Services, ECR, kubectl, desenvolvimento ágil