1
resposta

Usando Jenkins dentro de um container para subir um projeto Java

Olá senhores.

Subi o Jenkins em um container no docker seguindo a documentação do mesmo. "https://www.jenkins.io/doc/book/installing/docker/" O volume do container Jenkins está em uma pasta compartilhada.

Configurei uma pipeline de estilo livre que clona um repositório do GitHub, realiza testes, verifica dependência, faz o build e roda a aplicação java spring-boot.

O problema é que ele roda a aplicação dento do container desse jenkins, o que impede o acesso a mesma.

A solução mais simples seria refazer o container jenkins e abrir a porta que aplicação usa, mas não quero ficar abrindo porta e subindo as aplicações no mesmo container.

O que pensei seria subir o artefato em outro container na mesma rede mas, como não criar um container dentro de outro?

1 resposta

Olá, Bruno

Entendo sua preocupação em evitar a criação de um container dentro de outro, o que é conhecido como Docker-in-Docker e pode levar a problemas de segurança e complexidade.

Uma alternativa seria usar o conceito de "sidecar containers". Basicamente, você teria seu container Jenkins e o container da aplicação rodando lado a lado, compartilhando a mesma rede, mas não estando um dentro do outro.

Para isso, você pode configurar o Jenkins para construir a imagem Docker da sua aplicação e, em seguida, usar o Docker Compose ou o Kubernetes para implantar essa imagem em um novo container.

Aqui está um exemplo de como você poderia fazer isso:

  1. Configure o Jenkins para construir a imagem Docker da sua aplicação como parte do pipeline. Você pode usar o plugin Docker para Jenkins para isso.

  2. Depois que a imagem for construída, você pode usar o Docker Compose ou o Kubernetes para implantar essa imagem em um novo container. Isso pode ser feito como uma etapa separada no pipeline do Jenkins.

  3. Configure o Docker Compose ou o Kubernetes para que o novo container e o container Jenkins compartilhem a mesma rede. Isso permitirá que eles se comuniquem entre si.

Dessa forma, você pode ter o Jenkins e a aplicação rodando em containers separados, mas ainda assim capazes de se comunicar entre si.

Espero ter ajudado e bons estudos!