BLOG

Jenkins e Docker: Uma Combinação Poderosa para Automação de Software

Jenkins é um popular servidor de automação de código aberto amplamente utilizado para pipelines de integração contínua e entrega contínua (CI/CD). Ele fornece uma plataforma poderosa e flexível para automatizar processos de desenvolvimento de software.

Uma das principais características do Jenkins é sua integração perfeita com o Docker.

Docker é uma plataforma de containerização que permite empacotar aplicativos e suas dependências em containers leves e portáteis. Ao combinar o Jenkins com o Docker, você pode facilmente criar e gerenciar ambientes de compilação isolados, garantindo compilações consistentes e reproduzíveis em diferentes máquinas.

Vantagens da Combinação Jenkins-Docker

Usar o Jenkins com o Docker oferece várias vantagens. Em primeiro lugar, permite provisionar e gerenciar facilmente agentes de compilação como containers Docker, fornecendo uma maneira escalável e eficiente de executar seus pipelines de CI/CD. Você pode criar vários containers com diferentes configurações, permitindo a execução paralela de compilações e testes.

Além disso, o Docker fornece um ambiente consistente para suas compilações, eliminando o problema de “funciona na minha máquina”. Você pode definir uma imagem Docker com todas as ferramentas e dependências necessárias para o seu projeto, garantindo que cada compilação seja executada no mesmo ambiente, independentemente da máquina hospedeira.

O Jenkins também oferece plugins que aprimoram sua integração com o Docker. Por exemplo, o plugin Docker Pipeline permite definir seus pipelines de CI/CD usando um Jenkinsfile, que pode incluir etapas específicas do Docker, como construir e enviar imagens Docker, executar containers e executar comandos dentro dos containers.

Em resumo, o Jenkins e o Docker formam uma combinação poderosa para automatizar processos de desenvolvimento de software. Ao aproveitar as capacidades de containerização do Docker, você pode obter compilações consistentes, utilização eficiente de recursos e pipelines de CI/CD escaláveis.

Configuração e Uso

Neste tutorial, vamos criar uma imagem Docker do Jenkins usando a image jenkins/jenkins:lts-jdk17, fazendo um Configuration as Code (CasC), e instalando plugins automaticamente na inicialiação.

Dockerfile para criar o Jenkins
Arquivo para CasC
Plugins que serão instalados

Iremos também, configurar uma Multibranch Pipeline que irá ler o arquivo Jenkinsfile no repositório GitHub, onde está escrito para fazer o build da aplicação .Net, criar uma imagem Docker, enviar para o Docker Hub, fazer o pull da dessa imagem, executa-lá e verificar se está em execução.

Jenkinsfile

Para mais informações sobre o uso do Jenkinsfile, acesse: https://www.jenkins.io/doc/book/pipeline/jenkinsfile/

O ambiente em que este lab foi desenvolvido:

  • SO Ubuntu 24.04 LTS
  • Docker versão 26.1.4 build 5650f9b
  • git versão 2.43.0.

Pré-requisitos

  1. Certifique-se de ter o Docker instalado em sua máquina. Você pode baixar e instalar o Docker a partir do site oficial: https://docs.docker.com/get-docker/.
  2. Certifique-se de ter o Git instalado em sua máquina. Você pode baixar e instalar o Git a partir do site oficial: https://git-scm.com/book/en/v2/Getting-Started-Installing-Git.
  3. Crie uma conta no Docker Hub, https://hub.docker.com/signup/, e crie um repositório.
Tela do Docker Hub
Tela do Docker Hub para criação de repositório

Na imagem acima o Namespace é toolboxplayground e o repositório é dotnet-jenkins. O seu Namespace provavelmente será seu usuário no Docker Hub.

4. Faça um Fork do repositório https://github.com/toolbox-playground/pipelines-jenkins-exemplo-basico da Toolbox Playground.

5. Siga os passos abaixo para fazer um fork:

– Acesse o repositório https://github.com/toolbox-playground/pipelines-jenkins-exemplo-basico.
– No canto superior direito da página, clique no botão Fork.
– Isso criará uma cópia do repositório em sua conta do GitHub.

6. Depois de ter feito o fork do repositório acima, clone ele para a sua máquina local, usando o seguinte comando:

/media/97c723706f79367fbfa93b8fd112d04c

Lembre-se de substituir seu-usuario pelo seu usuário do GitHub.

7. Acesse o diretório que você acabou de clonar: pipelines-jenkins-exemplo-basico.

8. Com sua IDE de preferência, faça as seguintes alterações:

Navegue até pasta dotnet, abra o arquivo Jenkinsfile e altere os valores das seguintes variáveis conforme criado no Docker Hub:

  • DOCKER_NAMESPACE: Namespace criado no Docker Hub.
  • DOCKER_REPOSITORY: Nome do repositório criado no Docker Hub.
Exemplo de alteração no Jenkinsfile

Obs.: Não altere o DOCKER_TAG e o DOCKER_CREDS.

9. Após alterar, salve o arquivo e faça o commit e o push para o seu repositório com os seguintes comandos:

/media/90ccc12471b5ed54adea4e371658274f

/media/3ea0b3ce1dd695a684ca6fbd841a4ccd

Iniciando o Jenkins

  1. Dentro do diretório pipelines-jenkins-exemplo-basico construa a imagem Docker com o seguinte comando:

/media/fee37c2047901b260f699656e0737356

Obs.: Certifique-se de que seu Docker esteja em execução.

2. Execute o contêiner Docker com o seguinte comando (para Linux e Mac):

/media/768ed170066caea65eb5f840c92a0f21

Este trecho “— volume /var/run/docker.sock:/var/run/docker.sock” do comando acima monta o socket do Docker da máquina host no contêiner para permitir que o contêiner use o Docker da máquina host.

Para máquinas que usam Windows, deve-se substituir esse trecho por “ — volume //var/run/docker.sock:/var/run/docker.sock”.

/media/5c096c4b5f3d2facfde3f23296dbebd9

3. Aguarde a inicialização do conteiner, abra seu navegador e visite http://localhost:8080 para ver a página inicial do Jenkins.

Tela Jenkins
Tela de login do Jenkins

4. Insira o usuário e a senha, que foram definidos na execução do docker run, “— env JENKINS_ADMIN_ID=admin — env JENKINS_ADMIN_PASSWORD=password”, nesse caso usuário admin e password password.

Tela de login do Jenkins

Configurando uma Multibranch Pipeline

Para configurar uma Multibranch Pipeline no Jenkins e definir segredos para o usuário e senha do Docker e do GitHub, siga os passos abaixo:

  1. Clique em Gerenciar Jenkins.
Tela Inicial do Jenkins

2. Vá até Segurança e clique em Credentials.

Tela Gerenciar Jenkins

3. Clique em System.

Tela Credentials do Jenkins

4. Clique em Global credentials (unrestricted).

5. Clique em Add Credentials

a. Vamos adicionar as credenciais do GitHub:

  • Em Kind selecione Username with password e preencha o Username com o seu usário GitHub . Usaremos um token em Password, para criá-lo acesse https://github.com/settings/tokens/new?scopes=repo,user.
  • Na tela de criação do Token, em note coloque Jenkins Token e marque conforme abaixo e clique em Generate token:
  • Copie o token gerado e coloque em Password
  • Preencha o ID e Description com toolboxgithub.
  • Clique em Add

b. Clique novamente em Add Credentials

  • Em Kind selecione Username with password e prencha o Username com o seu usário do Docker Hub. Usaremos um token em Password. Para criar o token acesse https://hub.docker.com/settings/security e clique em New Access Token.
  • Preencha o Access Token Description com Jenkins Token e clique em generate.
  • Copie o token gerado e coloque em Password
  • Preencha o ID e Description com toolboxdocker.
  • Clique em Add

5. Clique em Painel de Controle e depois clique em Nova Tarefa para criar um novo projeto.

6. Na página de criação do projeto, digite Pipeline Jenkins, e selecione Multibranch Pipeline como o tipo de projeto. Clique em Tudo certo para confirmar a criação do projeto.

7. Na página de configuração do projeto digite Pipeline Jenkins em Display Name.

8. Vá até a seção Branch Sources, clique em Add source e selecione GitHub.

9. Em Credentials selecione toolboxgithub.

10. Em Repository HTTPS URL: coloque o endereço do respositório que você clonou, que deve ser algo assim: https://github.com/seu-usuario/pipelines-jenkins-exemplo-basico. Substitua seu_usuario pelo seu nome de usuário no GitHub.

11. Na seção Build Configuration, deixe o Mode by Jenkinsfile e no Script Path escreva dotnet/Jenkinsfile.

12. Clique em Save.

Agora que você configurou uma Multibranch Pipeline no Jenkins e definiu segredos para o usuário e senha do Docker Hub e do GitHub, na tela que irá aparecer, aguarde ate ser finalizada a pipeline, isso mesmo, a pipeline já foi disparada.

Após finalizar com sucesso, clique em Histórico de Compilações.

Clique no link Pipeline Jenkins >> main e você verá o que foi feito pela pipeline.

Espero que isso ajude! Se você tiver alguma dúvida ou precisar de mais informações, não hesite em perguntar.

Como desafio, dentro do mesmo repositório tem uma pasta chamada nodejs que possui um aplicação simples em Node.js com os arquivos Dockerfile e Jenkinsfile, tente rodar essa pipeline no Jenkins.

Marcelo Buzzeti

Marcelo Buzzeti

Esta gostando do conteúdo ? Compartilhe!