Alura > Cursos de DevOps > Cursos de Builds > Conteúdos de Builds > Primeiras aulas do curso Jenkins: automatize pipelines com qualidade de código e deploy seguro

Jenkins: automatize pipelines com qualidade de código e deploy seguro

Instalando e configurando Jenkins - Apresentação

Olá, meu nome é Paulo Alves e serei o instrutor neste curso de Jenkins.

Audiodescrição: Paulo se identifica como um homem negro. É careca, usa uma camiseta marrom-clara e está num estúdio da Alura. Ao fundo, há uma parede iluminada em tons de azul e rosa e uma estante com objetos à direita.

Para quem é o curso?

Este conteúdo é destinado a quem já atua na área de DevOps e deseja aprender mais sobre deploy (implantação) de serviços, aplicações e testes.

O que aprenderemos?

De forma prática, levaremos nossa aplicação To Do List para o ambiente de desenvolvimento e, em seguida, para o ambiente de produção, utilizando a esteira do Jenkins.

Pré-requisitos

É importante ter conhecimentos em:

Além dos vídeos, teremos diversas atividades, nosso fórum para tirar dúvidas e também nossa comunidade no Discord. Vamos estudar!

Instalando e configurando Jenkins - Criando uma instância e instalando Jenkins

Estamos trabalhando em um projeto que está demorando para ser entregue ao time de desenvolvimento. Para agilizar a entrega, instalaremos um servidor Jenkins e implementaremos automações.

Instalando o Jenkins

Acessaremos o terminal e entraremos no local do projeto onde estão os arquivos do Terraform, que utilizaremos para automatizar a instalação. O repositório se chama tf-aws-infra-jenkins. Utilizaremos o comando cd para entrar nesse diretório.

cd tf-aws-infra-jenkins

Em seguida, executamos o comando abaixo para baixar os pacotes do Terraform referentes a este projeto. É importante lembrar que as credenciais da AWS já devem estar configuradas.

terraform init

Planejando a infraestrutura

Na sequência, executaremos o comando abaixo para planejar a infraestrutura e verificar o que será criado.

terraform plan

No retorno, o Terraform indica que cinco recursos serão criados.

PLan: 5 to add, 0 to change, 0 to destroy.

Criando o ambiente

Em seguida, criaremos o ambiente com o comando abaixo.

terraform apply

No retorno, o Terraform pergunta se queremos criar ou negar a criação dos recursos, e confirmaremos a criação com "yes".

yes

Durante o processo de criação, algumas parametrizações são feitas para podermos acessar a instância e continuar com a criação do serviço Jenkins.

Conectando à instância

Após a criação pelo Terraform, vamos nos conectar à instância. Para melhorar a visualização, limparemos o terminal e utilizaremos o comando ssh -i para indicar a chave que usaremos para acessar a instância. Essa chave foi criada automaticamente no diretório do Terraform.

Também digitaremos jenkins.pem e a pessoa usuária que utilizaremos para acessar a instância. Como estamos usando o Ubuntu, a AWS já mantém a pessoa usuária ubuntu na instância por padrão. A pessoa usuária será seguida pelo símbolo @ e o IP da instância, que o Terraform fornece como saída.

Lembre-se de substituir o IP abaixo pelo fornecido em sua máquina.

ssh -i jenkins.pem ubuntu@15.228.101.18

Após nos conectarmos à instância, limparemos novamente o terminal e verificaremos se o Docker já foi instalado com o comando abaixo.

docker ps

Transferindo o arquivo Dockerfile para o servidor

Em seguida, faremos logout da instância com exit para sair da instância na AWS, com o intuito de transferir o arquivo Dockerfile ao servidor na AWS, onde ele será "buildado" (construído) para criar o servidor Jenkins, ainda sem configurações.

exit

No diretório atual, usaremos cd .. para voltar um nível.

cd ..

Em seguida, acessaremos o diretório 1_install_jenkins, onde está o Dockerfile.

cd 1_install_jenkins

Para transferir o arquivo, usaremos o comando scp -i, indicando a chave que está no diretório do Terraform, o qual especificaremos com ../tf-aws-infra-jenkins. Após indicar a chave e o diretório de origem, adicionaremos um -r para ver o que acontece e indicaremos o arquivo que copiaremos para o servidor — no caso, o Dockerfile.

Também adicionaremos a pessoa usuária ubuntu, o IP da instância, um sinal de dois pontos e o destino do arquivo como /home/ubuntu, para poder acessá-lo facilmente.

Caso o IP não tenha sido anotado, podemos copiá-lo na mensagem exibida no terminal após o logout.

scp -i ../tf-aws-infra-jenkins/jenkins.pem -r Dockerfile ubuntu@15.228.101.18:/home/ubuntu

Após executar o comando, o recursivo -r retornará o arquivo e o status de transferência para o servidor.

Dockerfile 100% 741 134.0KB/s 00:00

Configurando e executando o Jenkins

Após transferir o arquivo, voltaremos ao servidor utilizando a seta para cima para acessar comandos anteriores até encontrar o ssh. Se o comando ssh for executado no diretório atual, ele não funcionará, pois a chave jenkins.pem está no diretório do Terraform. Podemos indicar o diretório correto para acessar o servidor adicionando ../tf-aws-infra-jenkins/ antes da chave.

ssh -i ../tf-aws-infra-jenkins/jenkins.pem ubuntu@15.228.101.18

Para melhorar a visualização, limparemos a tela e executaremos ls na home da pessoa usuária ubuntu para verificar que o Dockerfile está presente.

ls

Retorno do terminal:

Dockerfile

Construindo a imagem Docker

Para construir a imagem, usaremos o comando docker build -t jenkins ., onde jenkins é o nome da imagem que será criada. O ponto final indica que o Docker deve buscar o arquivo de configuração Dockerfile no diretório atual.

docker build -t jenkins .

Após a construção da imagem, limparemos a tela novamente e executaremos docker images para verificar se a imagem foi criada com sucesso.

docker images

Retorno do terminal:

REPOSITORYTAGIMAGE IDCREATEDSIZE
jenkinslatest5ac5ab6a50672 minutes ago1.17GB

Executando o contêiner do Jenkins

Com a imagem criada, precisamos executá-la para subir o servidor Jenkins. Utilizaremos o comando docker run -d -p para liberar o terminal e permitir o acesso externo ao servidor, especificando:

docker run -d -p 8080:8080 --name jenkins -v /var/run/docker.sock:/var/run/docker.sock jenkins

Verificaremos que o contêiner do Jenkins está rodando com o comando abaixo.

docker ps

Retorno no terminal:

CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
6d0e3fce072cjenkins"/usr/bin/tini -- /u…"9 seconds agoUp 8 seconds8080->8080/tcp, 50000/tcpjenkins

Gerando o par de chaves para integração com o GitHub

Em seguida, nos conectaremos ao contêiner jenkins para executar um comando de SSH, que criará um par de chaves para integração com o GitHub. Para isso, utilizaremos o comando docker exec -it seguido do nome do contêiner e o shell de acordo com a imagem base utilizada — no caso, o bash.

docker exec -it jenkins bash

Após logar no contêiner, executaremos ssh-keygen para gerar o par de chaves, que será utilizado na integração com o GitHub.

ssh-keygen

O retorno indicará que a chave será criada no diretório /root/.ssh com o nome id_rsa, que é a chave privada.

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Created directory '/root/.ssh'.

Em seguida, o terminal solicitará uma senha. Não colocaremos senha na chave.

Ao finalizar, o terminal mostra que o par de chaves foi criado: id_rsa (chave privada) e id_rsa.pub (chave pública).

Your identification has been saved in /root/.ssh/id_rsa

Your public key has been saved in /root/.ssh/id_rsa.pub

Próximos passos

No próximo vídeo, faremos a integração do Jenkins com o GitHub.

Instalando e configurando Jenkins - Primeiro build e push no DockerHub

Finalizamos a geração do par de chaves, criamos a instância na AWS, transferimos o arquivo de configuração do Docker e o Dockerfile para a instalação do Jenkins, e conferimos que o contêiner do Jenkins está rodando.

Neste vídeo, iniciaremos as configurações da primeira pipeline.

Integrando o Jenkins com o GitHub

Acessando o terminal, limparemos a tela e faremos a integração do Jenkins com o GitHub utilizando o comando cat na home do servidor.

Estamos logados no servidor do Jenkins. Executaremos cat ~/.ssh, e a chave que usaremos no GitHub será a chave pública, cujo nome é id_rsa.pub.

cat ~/.ssh/id_rsa.pub

Após a execução, o retorno exibirá o conteúdo da chave na tela. Copiaremos esse conteúdo e acessaremos o GitHub.

Lembre-se de copiar o código da chave exibida em seu computador.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCL6OEHBJFAqjHjlsgLCxS4aompEvPstG0dKy509op6xhSYXQ17ivo9WhX+C9P500Tyl5T8NaGStW2gwbXzj+tBF804Uz58vqfcY01+hl+CP9S6DTyJ5T8iaClyzbjykjZ+B+E8U4z58+qfSE3UCQUXSi/F5AOSA87wmyvJ0ppbV78sSZ+BLHLuUS+lhc4NUzBhPwqBK315lzduegfvuotjyJp+AHQzC+umRIj1leCMSo2kTK+woZ5eomqX8Xec9zumfwArEXd/mzVaz043WeKZ409UktFCu0intopr+FUd7352+XfpbaKW0R4oz5R/EhodTx7p+dg07brYDBkZMdndRyZIg1CQTzPihM2S671TVkz201JvsRlFzgBz5z5R9EltiRepF3IGQYfayMSUZuWTRJuTHRVwcxr9Iy2TrAl7slKJSlc9DRZ9CejChx2lCEoSc= root@6d0e3fce072c

Abriremos o navegador e acessaremos o site do Github. Após o login, para inserir a chave pública no GitHub, clicaremos no ícone de avatar do canto superior direito da tela e selecionaremos a opção de configurações ("Settings"), representada por um ícone de engrenagem. No menu à esquerda da tela exibida, selecionaremos a opção "SSH and GPG keys" e adicionaremos uma nova chave, clicando em "New SSH key" na área principal da tela, à direita.

Na tela de adição de chaves, colaremos o conteúdo copiado do terminal no campo "Key". Já no campo "Title", nomearemos essa chave como jenkins-server.

jenkins-server

Após adicionar clicando em "Add SHH key", uma mensagem será exibida no topo da tela indicando que a chave foi adicionada com sucesso e haverá o direcionamento para uma tela com as informações das nossas chaves.

Para testar essa integração do Jenkins com o GitHub, retornaremos ao terminal e executaremos o comando ssh -T maiúsculo, seguido do endereço do GitHub. Primeiro, informaremos o usuário git@github.com.

ssh -T git@github.com

Após a execução, ele pedirá para adicionar uma nova conexão SSH local, e confirmaremos digitando "Yes".

Yes

A autenticação será bem-sucedida, indicando que a integração entre o Jenkins e o GitHub foi configurada.

Criando um repositório

Para concluir o processo de configuração inicial, voltaremos à página do Github no navegador. Após adicionar a chave SSH, acessaremos a home do GitHub, na parte de repositórios, na qual clicaremos em "New repository" para criar nosso primeiro repositório.

Na tela exibida, acessaremos o campo "Repository name" e nomearemos o repositório como to-do-list. Você pode escolher outro nome se quiser.

to-do-list

Mais abaixo, manteremos a opção "Public" selecionada, pois o repositório será público, e finalizaremos clicando em "Create Repository", no canto inferior direito da página.

Isso fará um direcionamento para a tela do repositório criado, que está vazio, por enquanto. Em seguida, integraremos este repositório com o Jenkins.

Integrando o repositório

Voltando ao terminal, coletaremos o IP do servidor Jenkins executando o comando abaixo, que retornará o IP público.

Lembre-se de considerar o IP exibido em seu computador.

curl ifconfig.me

Retorno do terminal:

15.228.101.18

Copiaremos o IP e voltaremos ao navegador. Criaremos uma nova guia e colaremos esse IP na barra de busca superior.

Na configuração, o Jenkins estará acessível pela porta 8080. Portanto, após o IP digitaremos :8080, indicando a porta de acesso ao contêiner na instância.

15.228.101.18:8080

Após executar, uma mensagem informará que o site não é seguro (pois não estamos utilizando HTTPS). Selecionaremos a opção "Ir para o site", que exibirá uma tela inicial do Jenkins, solicitando uma senha de administrador.

Para obter essa senha, retornaremos ao terminal. Temos o login feito dentro do contêiner do Jenkins, portanto, limparemos o terminal e sairemos desse contêiner com o comando exit.

exit

Em seguida, executaremos docker logs junto ao nome do contêiner Jenkins.

docker logs jenkins

Esse comando nos trará algumas informações, incluindo uma string com o password (senha) de administrador. Considere a senha exibida em seu computador.

46ca21a2edcd4bb184fc621189db2051

Copiaremos essa senha, retornaremos ao navegador e a colaremos no campo "Senha do administrador", pressionando "Continuar" logo em seguida. A tela exibida pedirá a instalação de algumas extensões, e selecionaremos a opção "Instalar as extensões sugeridas".

Após aguardar a instalação dos plugins sugeridos ser concluída, criaremos um login administrativo na tela exibida. Preencheremos os campos conforme abaixo:

"Nome de usuário":

alura

"Senha":

1234

"Confirmar a senha":

1234

"Nome completo" (da pessoa usuária):

Alura Aluno

"Endereço de e-mail":

alura@alura.com.br

Em seguida, clicaremos em "Salvar e continuar", no canto inferior direito.

Na próxima tela exibida, o endereço de acesso do servidor será exibido no campo "URL do Jenkins". Considere o endereço exibido em sua máquina.

http://15.228.101.18:8080/

Manteremos o padrão que já está configurado e clicaremos em "Gravar e concluir". Com isso, o Jenkins estará instalado e configurado. Agora, começaremos a utilizá-lo, clicando em "COmeçar a usar o Jenkins".

Criando uma tarefa no Jenkins

Na tela inicial do Jenkins, criaremos uma nova tarefa clicando em "Novo Tarefa", na aba lateral esquerda. Na tela exibida, nomearemos a tarefa no campo "nome de item" como "to-do-deploy".

to-do-deploy

Mais abaixo, selecionaremos a opção "Pipeline" e confirmaremos clicando em "Tudo certo", na parte inferior esquerda.

Na próxima tela, teremos as configurações da pipeline. No momento, não faremos essas configurações — basta clicar em "to-do-deploy" na barra que exibe o caminho de navegação atual, no canto superior esquerdo, para voltar à tela da tarefa.

Na aba lateral esquerda, temos opções que não modificaremos agora. Ao longo do curso, utilizaremos essas opções para as demais configurações.

Conclusão e próximos passos

Com isso, temos o Jenkins configurado e integrado com o GitHub, e nossa primeira tarefa foi criada. A seguir, faremos mais configurações para acionar o primeiro build.

Sobre o curso Jenkins: automatize pipelines com qualidade de código e deploy seguro

O curso Jenkins: automatize pipelines com qualidade de código e deploy seguro possui 99 minutos de vídeos, em um total de 52 atividades. Gostou? Conheça nossos outros cursos de Builds em DevOps, ou leia nossos artigos de DevOps.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Builds acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas