Introdução
Neste tutorial, vamos explorar o mundo do DevOps e como podemos integrar Jenkins e Docker para implementar práticas de CI/CD, otimizando o ciclo de vida do desenvolvimento de software. A integração de Jenkins, uma ferramenta amplamente utilizada para automação de builds e integração contínua, com Docker, que permite a criação de contêineres para suas aplicações, pode melhorar significativamente a agilidade e a eficiência das equipes de desenvolvimento. Vamos começar configurando um projeto simples em Java com Spring Boot e, em seguida, configuraremos o Jenkins para automatizar builds, testes e a implantação usando contêineres Docker. Este tutorial é destinado a desenvolvedores que buscam aprender a aplicar a cultura DevOps em seus projetos e a usar ferramentas modernas para alcançar eficiência no desenvolvimento.
Etapas
Configuração do Ambiente de Desenvolvimento
Verifique se você possui o JDK (Java Development Kit), Maven e Docker instalados em sua máquina. Para o Jenkins, ele será executado em um contêiner Docker. Utilize os comandos a seguir para verificar as instalações.
commands# Verificar Java e Maven
java -version
mvn -version
# Verificar Docker
docker --versionCriação do Projeto Spring Boot
Utilize o Spring Initializr para gerar um novo projeto Spring Boot com as dependências necessárias. Configure o projeto com as opções: **Project**: Maven, **Language**: Java, **Spring Boot**: última versão estável, **Packaging**: Jar, **Java**: 11 ou superior. Adicione as dependências ‘Spring Web’ e ‘Spring Boot DevTools’ e faça o download do projeto.
pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>docker-demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>docker-demo</name> <description>Demo com Docker e Jenkins</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Implementação de uma Classe Controladora
Crie uma classe controladora simples para gerenciar uma lista de produtos. Vamos expor endpoints para criar e listar produtos usando o Spring Web.
ProdutoController.javapackage com.example.dockerdemo.controller; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; @RestController @RequestMapping("/api/produtos") public class ProdutoController { @GetMapping public List<String> listProdutos() { return Arrays.asList("Produto 1", "Produto 2"); } @PostMapping public String createProduto(@RequestBody String produto) { return "Produto " + produto + " criado com sucesso!"; } }
Criação do Dockerfile
Crie um arquivo Dockerfile para containerizar sua aplicação Spring Boot. Certifique-se de que ele está na raiz do seu projeto.
DockerfileFROM openjdk:11-jre-slim VOLUME /tmp COPY target/docker-demo-0.0.1-SNAPSHOT.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"]
Construindo a Imagem Docker
Use o Docker para construir a imagem da sua aplicação. Execute o comando no terminal na raiz do seu projeto onde está o Dockerfile.
commands# Construir a imagem Docker
mvn clean package
docker build -t docker-demo .Executando o Contêiner Docker
Agora que você tem a imagem, execute o contêiner Docker. Certifique-se de que a porta 8080 esteja exposta para acessar a API.
commands# Executar o contêiner Docker
docker run -p 8080:8080 docker-demoConfigurando Jenkins com Docker
Execute o Jenkins em um contêiner Docker. O seguinte comando executará o Jenkins na porta 8081.
commands# Baixar e executar o contêiner Jenkins
docker run -d -p 8081:8080 jenkins/jenkins:ltsCriando um Pipeline no Jenkins
Acesse o Jenkins na porta 8081, crie um novo pipeline e configure-o para executar os seguintes passos: construir o projeto, criar a imagem Docker e executar o contêiner. Use o seguinte código do pipeline como exemplo.
Jenkinsfilepipeline { agent any stages { stage('Build') { steps { sh 'mvn clean package' } } stage('Docker Build') { steps { sh 'docker build -t docker-demo .' } } stage('Run Docker') { steps { sh 'docker run -d -p 8080:8080 docker-demo' } } } }
Testando a Integração
Os testes podem ser realizados através do Postman ou cURL. Teste os endpoints da API que você criou anteriormente para verificar se tudo funciona corretamente.
curl_examples# Listar produtos
curl -X GET http://localhost:8080/api/produtos
# Criar um novo produto
curl -X POST -H "Content-Type: application/json" -d '"Produto 3"' http://localhost:8080/api/produtos
Conclusão
Neste tutorial, exploramos como integrar DevOps usando Jenkins e Docker para otimizar o ciclo de vida do desenvolvimento de software. Abrangemos desde a configuração do ambiente, criação do projeto Spring Boot, até a configuração do Jenkins para automação do CI/CD. Com a construção e execução de contêineres Docker, conseguimos simplificar e agilizar os processos de build e implantação. Este é apenas o começo! Você pode expandir essa configuração para ter um fluxo de trabalho mais robusto à medida que ganha confiança e experiência.