Primeiros passos com Jenkins

CI/CD com Jenkins: Primeiros passos

No mundo DevOps, a automação de processos é essencial para aumentar a eficiência e reduzir erros humanos. Um dos componentes chave dessa automação é o pipeline de CI/CD (Continuous Integration/Continuous Deployment), que automatiza o processo de integração e implantação de código. Neste artigo vamos explorar como criar seu primeiro pipeline CI/CD usando Jenkins, uma das ferramentas mais populares para essa finalidade.

Um pouco sobre o Jenkins…

Jenkins é uma ferramenta de automação de código aberto que ajuda a automatizar os estágios do desenvolvimento de software, desde a construção até a implantação. Com Jenkins, você pode configurar pipelines de CI/CD para automatizar a integração e entrega contínua de seu software. Você pode encontrar mais detalhes sobre a plataforma em https://www.jenkins.io/.

Pré-requisitos

Antes de começarmos, você precisará dos seguintes pré-requisitos:

  • Jenkins: Você pode instalar o Jenkins localmente ou usar uma versão hospedada. Para isso, basta conferir as opções disponíveis em https://www.jenkins.io/download/;
  • Acesso ao repositório de código: GitHub, GitLab ou qualquer outro sistema de controle de versão.

Configurando o Jenkins

Instalação do Jenkins

Faça o download e instale o Jenkins a partir do site https://jenkins.io/download/. Baixe sempre a última versão compatível com o seu Sistema Operacional (SO). Em seguida, inicie o Jenkins, como mostra a documentação do link anterior, e acesse-o através do navegador (geralmente em http://127.0.0.1:8080 ou http://localhost:8080/ ).

Configuração inicial

Ao acessar o Jenkins pela primeira vez, você precisará completar a configuração inicial, que inclui desbloquear o Jenkins, instalar plugins recomendados e criar seu primeiro usuário administrador.

Para desbloquear o Jenkins, é necessário verificar o conteúdo de um arquivo que é indicado na primeira tela que é aberta (ex.: cat ~/.jenkins/secrets/initialAdminPassword) – abra sempre o arquivo indicado pelo próprio jenkins pois a localização do arquivo é diferente para cada SO:

Neste arquivo, temos apenas a senha que é necessária para seguirmos. Basta lê-lo da forma que você achar mais conveniente e inserir o valor no campo acima.

Observação: Para alguns SO, como MacOS, o Jenkins solicita instalar plugins por padrão, durante o passo de configuração inicial. Se essa tela aparecer para você nesse passo atual, basta seguir com a instalação sugerida e deixar o Jenkins instalar todos os plugins e dependências necessárias (e básicas) por você. Mostraremos esses plugins no item 3.

Continuando com a nossa instalação, o próximo passo é o que criará o primeiro usuário administrador que será usado para fazer toda a configuração do Jenkins.

Basta preencher os campos necessários e clicar no botão <CONTINUAR> para irmos para o último item de configuração:


Precisamos inserir qual o endereço que será usado pela nossa instalação do Jenkins.


Com isso, terminamos a configuração inicial do nosso Jenkins! Ele já está disponível e executando no endereço que acabamos de inserir.

O Jenkins abrirá para você com a seguinte GUI (Graphical User Interface):

Instalação de plugins necessários

Uma das coisas mais legais do Jenkins, é a vasta gama de plugins que ele suporta, dando inúmeras novas funcionalidades que podem ser usadas à vontade. Para pipelines CI/CD, os plugins mais comuns são:

  • Git Plugin: Para integração com repositórios Git;
  • Pipeline Plugin: Para criar pipelines de CI/CD.

Como dito no item 2, para alguns sistemas operacionais o Jenkins solicita instalar plugins durante o passo de configuração inicial.  Neste caso, o Jenkins instala todos os plugins e dependências mais utilizadas por você:


Criando sua primeira pipeline

Existem algumas formas diferentes para criar pipelines no Jenkins. A que abordaremos aqui, é a de utilizar um arquivo que usa a linguagem Groovy para criar as pipelines.

Para criarmos nossa primeira pipeline, vamos clicar na opção Nova tarefa (Ou New Item se estiver em inglês) no painel principal do Jenkins:


 

Dê um nome ao seu projeto e selecione “Pipeline” como tipo de projeto.


 

O Jenkins te dará diversas opções de customização, como mostrado abaixo, mas não se preocupe com elas neste momento.


Descendo um pouco a tela, dentro da opção Pipeline, temos o item Definition, onde selecionaremos a opção Pipeline Script. Em seguida, copie  a sintaxe do Groovy que temos abaixo e cole na seção Script do seu Jenkins:

				
					pipeline {
       agent any
       
       stages {
           stage('Checkout') {
               steps {
                   git branch: 'main',
                   url: 'git@github.com:toolbox-playground/hello-world-languages.git'
               }
           }

           stage('Build') {
               steps {
                   // Adicione os comandos para construir seu aplicativo
                   echo 'Buildando'
               }
           }
           stage('Test') {
               steps {
                   // Adicione os comandos para testar seu aplicativo
                   echo 'Testando'
               }
           }
           stage('Deploy') {
               steps {
                   // Adicione os comandos para implantar seu aplicativo
                   echo 'Deployando'
               }
           }
       }
   }

				
			

Essa é uma pipeline extremamente simples com o intuito de apenas demonstrar a capacidade e o uso do Jenkins. Agora, vamos entender um pouco mais como essa pipeline é dividida através da análise de seus blocos de código Groovy:

Definição do agente

				
					pipeline {
       agent any


				
			

Este ponto é onde podemos informar os agentes responsáveis por executar essa pipeline. Pensando em um ambiente real, normalmente existem centenas de agentes disponíveis para uso. Esses agentes podem ter configurações diferentes, incluindo software e hardware totalmente diferentes entre si, que podem ter diferentes propósitos.

Clonando o repositório

É aqui onde definimos qual o repositório, nesse caso do GitHub, juntamente com a branch que iremos usar durante o nosso processo.

				
					stages {
           stage('Checkout') {
               steps {
                   git branch: 'main',
                   url: 'git@github.com:toolbox-playground/hello-world-languages.git'
               }
           }

				
			

Build, Test e Deploy

Essa é a parte responsável por fazer o build e executar todos os estágios que você acredita que faz sentido para a sua aplicação. Normalmente, um CI/CD bem feito possui estágios em que diversos testes são feitos, incluindo a execução de ferramentas de segurança e qualidade. E os estágios de Deploy também são particulares de cada projeto, já que você pode ter n ambientes (e estratégias de deploy) nos quais é necessário efetuar o deploy.

				
					            stage('Build') {
               steps {
                   // Adicione os comandos para construir seu aplicativo
                   echo 'Buildando'
               }
           }
           stage('Test') {
               steps {
                   // Adicione os comandos para testar seu aplicativo
                   echo 'Testando'
               }
           }
           stage('Deploy') {
               steps {
                   // Adicione os comandos para implantar seu aplicativo
                   echo 'Deployando'
               }
           }
       }
   }

				
			

Após configurar a pipeline, clique em Save para salvar, e para iniciar o pipeline, clique em Construir Agora (Ou Build Now).

Você poderá ver os resultados de cada estágio em tempo real, na parte debaixo do menu, no item Histórico de Construções (Build History em inglês):

Também é possível ver o console de execução, com toda a saída dos comandos que inserimos. Para isso, basta clicar no número da build (No exemplo acima, é a build #1), em seguida ir na opção Console Output:

Se você descer a tela, vai conseguir ver todos os comandos que inserimos, que é onde vai aparecer todos os comandos da sua pipeline:

Ou se preferir ver os steps e jobs da pipeline de uma maneira mais user-friendly, clique em Stages ou Pipeline Console.


Adicionando um repositório Git

No nosso exemplo, utilizamos um repositório que está público para a internet  porém, sabemos que na realidade os nossos repositórios são privados, com acesso limitado a um determinado número de pessoas.

Para conseguirmos fazer com que o Jenkins baixe repositórios privados, é necessário inserir as credenciais que ele deve usar. Tais credenciais podem ser usuário/senha, tokens, chaves SSH, entre outros meios de autenticação.

De qualquer forma, no painel principal do Jenkins, vá para Gerenciar Jenkins e clique em Credenciais, dentro do item de Segurança:

Clicando em cima do escopo System, clique novamente na opção Global credenciais e por fim Adicionar Credenciais.

Selecione qual vai ser o Tipo (em inglês Kind) de autenticação e preencha os dados necessários. Depois clique no botão Create. Guarde o valor do campo ID que o Jenkins criou para você (ou caso tenha utilizado algum personalizado, tenha certeza que você sabe qual é o valor correto).

Voltando agora para a nossa pipeline, devemos fazer um pequeno ajuste no Groovy, adicionando a variável credentialsId apontando para o ID da credencial que criamos no passo anterior.

				
					pipeline {
       agent any
       
       stages {
           stage('Checkout') {
               steps {
                   git branch: 'main',
                   credentialsId: <CREDENTIALS_ID>,
                   url: 'git@github.com:toolbox-playground/hello-world-languages.git'
               }
           }


				
			

Acelere sua carreira conosco

A Mentoria Next Level DevOps é um programa de mentoria de 12 meses com encontros semanais ao vivo, com um grupo seleto e restrito, onde estaremos do seu lado para mantê-lo relevante e atualizado no mercado de tecnologia, aprendendo e implementando as melhores práticas e ferramentas de DevOps.

Clique aqui para entrar na prioridade pela melhor oferta de lançamento

Considerações finais

Criar um pipeline CI/CD com Jenkins pode parecer desafiador no início, mas com a prática, torna-se uma ferramenta indispensável para qualquer desenvolvedor. A automação não só melhora a eficiência, mas também permite que as equipes de desenvolvimento entregam software de alta qualidade de maneira consistente. 

Não se esqueça de experimentar e ajustar seu pipeline conforme necessário para atender às necessidades específicas de seu projeto.