Primeiras aulas do curso Jenkins: integração contínua

Jenkins: integração contínua

Integração Contínua - Apresentação

Olá, pessoal. Sejam muito bem-vindos ao treinamento de Jenkins, meu nome é Rodrigo Ferreira e vou ser o instrutor que vai acompanhar vocês ao longo deste treinamento. O foco deste treinamento é aprender sobre o Jenkins, como ele funciona, como instalamos.

Listei alguns tópicos, os principais assuntos que vamos discutir durante este treinamento. Vamos começar discutindo sobre essa questão de integração contínua, essa prática que os times de desenvolvimento costumam utilizar. Vamos entender o que é integração contínua, quais são os problemas e dificuldades, e as ferramentas que vieram para ajudar, dentre elas o Jenkins, que será o foco do treinamento.

Na sequência passamos a estudar o Jenkins em si. Vamos ver como fazemos para instalar, para configurar o Jenkins, como criamos nossos projetos, que eram chamados de jobs. Questão de plugins, que uma das vantagens do Jenkins em relação a outras ferramentas parecidas é que ele tem essa questão de ser extensível, de você poder instalar, criar plugins para adicionar novos comportamentos, novas funcionalidades que não existem por padrão instaladas.

Também vamos aprender sobre essa parte de notificações, como posso configurar o Jenkins para notificar por e-mail ou por outras ferramentas sempre que o trabalho, alguma ação for disparada, e para notificar o time sobre alguma situação.

Até vamos criar um projeto, vamos ter uma aplicação onde vamos simular um deploy automatizado, é uma das coisas que você também consegue fazer com o Jenkins.

Esses são os principais tópicos que vamos discutir aqui sobre o Jenkins. Esse treinamento é um treinamento de introdução ao Jenkins e esse conceito de integração contínua utilizando uma ferramenta para automatizar alguns desses processos, sendo o foco do curso o Jenkins.

Espero que vocês gostem bastante desse treinamento, vejo vocês na primeira aula, onde vamos discutir justamente sobre integração contínua. Um abraço e até lá.

Integração Contínua - O que é integração contínua?

Continuando então, antes de começarmos a falar e aprender a utilizar o Jenkins, vamos discutir sobre um assunto importante, que é esse tópico chamado integração contínua. Jenkins e outras ferramentas servem como facilitadores, vieram para automatizar algumas tarefas e deixar esse processo de integração contínua um pouco mais simples e automatizado.

O que é integração contínua? Esse termo, talvez você já tenha se esbarrado com ele, é um termo bastante popular, bastante utilizado pelos times de desenvolvimento de software, principalmente pelos times que trabalham com devops. É um termo bem antigo, um hábito, ou uma prática antiga, já utilizada e recomendada em algumas metodologias ágeis como XP.

Para entendermos, vamos pensar na seguinte situação. Imagine que você tem um software, você está desenvolvendo uma aplicação e é comum que as empresas, você tenha um time de desenvolvimento, vai ser o time responsável por desenvolver essa aplicação.

Coloquei uma figura, imagine que você tenha quatro pessoas que trabalham como desenvolvedoras, são pessoas que travam no time de desenvolvimento, você tem a dev1, que é uma pessoa que está cuidando de uma funcionalidade de login, por exemplo. Essa pessoa está responsável por essa funcionalidade. Ela está lá trabalhando, implementando a funcionalidade de login.

Enquanto que a pessoa que trabalha como dev2 está fazendo um bugfix, ela está corrigindo algum bug, algum erro em alguma das funcionalidades que foi reportado por alguém. Paralelo a isso tem a dev3 que é uma outra pessoa que está cuidando de uma funcionalidade, que é o CRUD de produtos, aquele cadastro, listagem, alteração e exclusão, aquele cadastro de produtos.

Por fim, o último desenvolvedor está fazendo um refactoring em geral, então talvez ele esteja melhorando alguma coisa na arquitetura, trocando algum framework, biblioteca, enfim. Você tem essas quatro pessoas que estão trabalhando em paralelo, cada uma cuidando de um pedaço do software. Mas são pessoas que fazem parte do mesmo time, estão trabalhando em cima do mesmo software.

E aí vem essa questão. Como essas pessoas vão trazer para conversar entre si? Para compartilhar e sincronizar os seus códigos? Elas vão ter que integrar de alguma maneira esses códigos, e aí como funciona isso?

É muito provável que elas vão utilizar alguma ferramenta de controle de versão, provavelmente o git, svm, ou outra ferramenta do gênero. E aí você vai ter um repositório central. Todas elas vão estar conectadas com esse repositório central, fazendo os commits e fazendo essas integrações nesse repositório central.

Essa é a maneira que elas provavelmente vão utilizar para integrar, sincronizar seus códigos com uma certa frequência. E aí vem outra questão. Quando uma pessoa, ou várias dessas pessoas sincronizam seus códigos, como elas garantem que tudo está ok, que tudo funciona conforme o esperado? Já que cada uma vai ter que estar trabalhando em uma funcionalidade, talvez elas vão estar mexendo em códigos que sejam compartilhados e quando for juntar tudo, como sei se tudo continua funcionando conforme o esperado? Se tudo está ok?

Preciso ter algum processo, alguma maneira de verificar se tudo funciona conforme o esperado. Geralmente entra um processo de build, o pessoal chama esse processo de build, e isso vai depender das tecnologias, da linguagem de programação, enfim.

Coloquei uma figura aqui representando um possível processo de build, para verificar se tudo está ok. Você tem o código que está compartilhado no seu repositório central, você faz uma compilação, se for uma linguagem compilada, como por exemplo o Java, e aí tudo compilou? Beleza, só que só compilar não basta, às vezes você tem um monte de erros naquele código.

Ele está compilando com sucesso, mas tá cheio de erro no meio do caminho. Então você tem que ter mais uma etapa, no mínimo, que seria a etapa de testes. Sejam testes manuais sendo executados por uma pessoa ou por um time de testes, ou de preferência testes automatizados. A partir do momento em que o código compila, eu executo esses testes, e se tudo passou, se tudo está funcionando, se os testes estão passando, significa que sucesso.

O build estar funcionando com sucesso é um sinal de que a integração funcionou, que essa sincronização dos códigos de todo mundo, quando forem integrados, eles estão funcionando conforme o esperado. Essa é uma maneira de você verificar se essa sincronização de códigos entre as pessoas que fazem parte do time de desenvolvimento funciona conforme o esperado.

Isso é justamente o processo que foi chamado de integração contínua. Coloquei uma frase aqui, ela é um pouco extensa, do Martin Fowler, que é uma pessoa bem conhecida na comunidade de desenvolvimento, que resume o que é integração contínua.

Depois vamos discutir com mais calma isso, mas vamos ler essa frase e tentar entender. Segundo o Martin Fowler, integração contínua é uma prática de desenvolvimento de software onde os membros de um time integram seu trabalho de maneira frequente, geralmente cada pessoa vai integrar pelo menos uma vez por dia, e você pode ter mais de uma integração por dia.

Percebe que essa questão de integração ocorre com certa frequência, que pode ser uma vez ao dia, ou múltiplas vezes ao longo do dia. Para que faço essa integração ao longo do dia?

Cada integração dessa é verificada por um build automatizado, além dos testes, testes automatizados, que é recomendado, para detectar erros de integração o mais rápido possível.

Percebe? Quero fazer essa integração de maneira frequente justamente para executar o build, rodar os testes automatizados e detectar o mais rápido possível bugs, problemas, erros.

Muitos times consideram isso importante, esse processo de integração contínua muito importante, porque geralmente isso leva a você ter redução nos problemas de integração, permite que o time desenvolva softwares coesos mais rapidamente. Isso é a visão do Martin Fowler.

Por isso ele considera essa prática extremamente importante, porque com ela consigo rapidamente detectar problemas, o mais cedo possível, antes de colocar em produção esse software, e usuários possam detectar esses problemas. Quanto mais cedo, mais rápido eu integrar meu código, detectar esses problemas e corrigi-los, melhor.

Vai ser mais fácil, vai ser mais barato, e eu vou evitar de levar códigos com bugs, com erros para a produção, para deixar isso exposto para os usuários. Por isso o Martin Fowler escreveu essa frase e considera esse processo extremamente importante.

Isso é meio extenso. Resumi aqui. Integração contínua, pensa da seguinte maneira. Integração contínua nada mais é do que o hábito contínuo de você integrar seu código, o código de uma aplicação, para verificar se tudo funciona conforme o esperado.

Quanto mais vezes você executar isso ao longo do dia, melhor, mais rápido você detecta bugs, detecta os problemas e fica mais simples e mais barato de você corrigir, do que se você só for integrar uma vez por mês, só quando for gerar um deploy, for colocar em produção.

Vai ter acumulado muito código, vão ser muitos problemas, vai ser mais difícil de encontrar esses problemas e de corrigir. Então quanto maior for a frequência, quanto menor for o tempo de você integrar esse código e detectar problemas e corrigi-los, mais simples será, mais barato será.

Essa é a ideia da integração contínua. E existe um livro bem famoso, que é esse livro chamado Continuous Integration, que ele fala exatamente sobre isso, sobre esse processo de integração contínua, por que ele é importante, por que os times de desenvolvimento de software deveriam adotar esse hábito, essa prática de integrar continuamente seu código e as vantagens e desvantagens de você adotar essa prática.

Esse é um livro de referência que deixo para vocês. Na aula de hoje queria só discutir sobre essa questão de integração contínua, sobre esse processo de integração contínua, e por que ele é importante, por que os times devops, principalmente times que trabalham com devops costumam utilizar essa prática.

Obviamente, como isso é algo que vou ter que ficar executando o tempo inteiro, rodando testes, e tal, provavelmente será necessário utilizar uma ferramenta para automatizar e para deixar isso mais simples. Aí que entra o Jenkins como uma dessas ferramentas, só que isso vai ser assunto do próximo vídeo, onde vamos discutir onde entram essas ferramentas e o Jenkins propriamente dito.

Integração Contínua - Conheça o Jenkins

Continuando então, no último vídeo discutimos sobre integração contínua, o que é a integração contínua, por que os times de desenvolvimento utilizam isso, principalmente trabalha com devops, e só recapitulando aqui então, lembra que integração contínua nada mais é do que você integrar continuamente seu código, pegar o código que você está escrevendo, juntar com o código do seu time, das outras pessoas que fazem parte do seu time, e verificar se está tudo funcionando corretamente.

Isso você faz com certa frequência, é um hábito contínuo, certo? Só que quando você faz essa integração, você tem que disparar o processo de build da aplicação, você tem que pegar esse código que está no repositório central, trazer as mudanças que o resto das pessoas do time, do seu time fez, e executar esse processo de compilação, se for uma linguagem compilada, por exemplo, Java, rodar os testes, verificar se está tudo funcionando conforme o esperado.

Isso que é integração contínua, você ficar fazendo isso com uma certa frequência, disparando esse processo com certa frequência, de preferência com alta frequência, várias vezes ao longo do dia, para você identificar o mais rápido possível problemas e corrigi-los de uma maneira mais rápida e mais barata.

Só que isso vai levar algumas coisas. Você vai ter que para fazer esse processo de integração contínua, você vai precisar lembrar de executar isso continuamente. As pessoas do seu time vão precisar se lembrar de integrar o código continuamente.

Às vezes as pessoas esquecem, às vezes as pessoas estão focadas, trabalhando, escrevendo código, esquece de ficar integrando, trazendo as mudanças do resto do time, quando terminar sincronizar seu código com o resto do time, pode acontecer de alguém se esquecer de fazer isso, e aí você pode levar algum problema, ter algum código ali que na hora de integrar vai dar problema, e quanto mais tempo você demora para integrar esse código, mais difícil tende a ficar de fazer ajustes e correções, caso aconteça algum problema no meio do caminho.

Outra coisa também é que você integrar seu código implica em você ter que executar os testes automatizados do projeto. No começo do projeto, quando você tem poucos testes, os testes executam em alguns segundos, no máximo um ou dois minutos, mas conforme o projeto vai crescendo, conforme novas funcionalidades vão sendo implementadas, vai começando a demorar mais ainda essa execução dos testes, podendo demorar alguns minutos ou até mesmo horas para executar.

Isso já começa a ficar um negócio meio trabalhoso. Toda vez que for integrar meu código vou ter que rodar os testes e os testes demoram alguns minutos, pode me atrapalhar.

Essa demora justamente vai afetar sua produtividade. então quanto mais código você tem para integrar, quanto mais testes automatizados você tem para executar, maior vai ser a demora, e isso vai afetar sua produtividade. A consequência é que você vai evitar de integrar seu código.

Era para você integrar com uma frequência alta, você vai diminuir essa frequência porque isso afeta sua produtividade. Imagine, toda vez que você for integrar seu código você tem que parar quinze minutos. Quinze minutos para baixar o código, compilar e rodar os testes. O que você vai fazer nesses quinze minutos? Vai ficar parado? Vai ficar batendo papo?

Isso vai afetar sua produtividade, então você já começa a diminuir as integrações que vocês faz. Percebe? Começou a atrapalhar, o processo começou a afetar sua produtividade, você vai começar a abandonar esse processo, abandonar essa prática de integração contínua.

Aí é que entram as ferramentas. Para que você não esqueça de executar, para que esse processo seja executado de maneira automatizada, de maneira rápida, e sem atrapalhar seu trabalho, sem afetar sua produtividade, aí é que entram as ferramentas de integração contínua. Aí é que vem o Jenkins e outras ferramentas.

O pessoal começou a utilizar essas ferramentas para resolver esses problemas, para que você consiga continuar focado em escrever código, implementar as funcionalidades no seu projeto, sem ter que ficar travado, sem ter que ficar lembrando de executar esse processo de integração contínua.

Existem diversas ferramentas de integração contínua, entre elas o Jenkins, que vai ser o foco do treinamento, mas tem o Circleci, o próprio GitLab, que é um concorrente do GitHub, ele também tem um processo interno de integração contínua, tem o TC, o Travis, dentre outras ferramentas.

Aqui eu trouxe algumas das principais ferramentas de integração contínua, sendo que no caso deste treinamento vamos focar no Jenkins. O Jenkins nada mais é do que um servidor para fazer automatização de tarefas. O Jenkins automatização. Esse é o foco, o coração do Jenkins, automatizar tarefas.

Que tarefas? Tarefas para build, para testes e para até deploy e entrega de software. O Jenkins não é a integração contínua em si. Integração contínua é um hábito feito pelas pessoas, pelo time de desenvolvimento. É o hábito das pessoas estarem continuamente integrando o código delas. O Jenkins é só uma ferramenta que vai automatizar essa integração.

Automatizar passos dessa integração. O passo de compilar, do build da aplicação, de executar testes e alertar alguém se algum problema for encontrado. Não confunda Jenkins com integração contínua. Integração contínua é uma coisa, Jenkins é só uma ferramenta que automatiza passos da integração contínua.

O Jenkins é uma ferramenta bem antiga, ele foi criado em 2005 pela Sun, empresa que cuidava do Java antes da Oracle comprar, e ele se chamava na verdade Hudson, esse era o nome da ferramenta. Só que em 2008 teve a compra da Sun pela Oracle, gerou alguns atritos de direitos autorais.

A Oracle tinha os direitos autorais do Hudson, desse nome, então o pessoal decidiu criar tipo um fork, projeto alternativo, e aí ele foi chamado de Jenkins. Você tinha os dois projetos rodando em paralelo. Você tinha o Hudson, que era mantido pela Oracle, era da Oracle, a Oracle tinha os direitos autorais, e você tinha o Jenkins, que era um projeto, um fork, que era o projeto baseado no Hudson, mas tinha outro nome por causa dessa questão de direitos autorais.

Ficaram esses dois projetos em paralelo, até que em 2016, 2017 a Sun decidiu doar o código, teve a doação do código para a Eclipse foundation, para a fundação Eclipse, mas em 2016, 2017 ela foi abandonada e hoje só existe então o Jenkins. Então não existe mais o Hudson, ele existiu até 2016, 2017.

Uma das grandes vantagens do Jenkins é que ela é uma ferramenta open source, então é gratuita, código fonte aberto, você pode participar e colaborar, e é de graça, você não paga nada para utilizar, não tem que comprar licença. Dependendo do projeto isso é bastante útil.

É uma ferramenta também, uma grande diferença, uma grande vantagem do Jenkins, extensível. Ele tem um recurso que vamos estudar ao longo do curso chamado de plugins, que você pode criar ferramentas que vão complementar o Jenkins, vão adicionar características, comportamentos que não existem por padrão no Jenkins.

Isso permitiu com que pessoas estendessem o Jenkins e criassem algumas ferramentas utilitárias para algumas necessidades que o Jenkins não atendia. Ao invés das pessoas abandonarem o Jenkins elas criavam plugins para cumprir com esses objetivos, para atender com essas necessidades que não vinham por padrão no Jenkins.

Tem várias maneiras de você rodar o Jenkins. Ele pode ser instalado no sistema operacional, você pode rodar ele de maneira stand alone, porque o Jenkins nada mais é do que uma aplicação Java web, você pode rodar de maneira stand alone, ou você pode utilizar o docker. Se você está acostumado a trabalhar com docker você tem uma imagem do Jenkins, você pode rodá-lo no docker, criar um container docker e rodar o Jenkins por ali.

Aí você não precisa instalar e não tem nenhum desses problemas de infraestrutura do Jenkins na sua máquina. Aqui é só uma introdução, falando um pouco da história do Jenkins e fazendo esse reforço das ferramentas de integração contínua.

Só que percebe, integração contínua é o hábito das pessoas integrarem continuamente o código, de você estar lá programando e com certa frequência integrando seu código, trazendo as mudanças que seu time fez conforme você vai terminando sua funcionalidade, você faz o push dos commits e integra também seu código, disponibiliza, sincroniza esse código com o resto da galera.

Só que aí, para você garantir que tudo está funcionando conforme o esperado, você tem que ver se esse seu código compila, se os testes automatizados estão passando, se algum problema não foi encontrado no meio do caminho para você resolver.

Essas tarefas de compilar, rodar testes e tal, como são mais demoradas, são mais chatas, digamos assim, entram as ferramentas como Jenkins, para tirar essa carga dos seus ombros, para você não ter que ficar executando essas tarefas manualmente o tempo inteiro. A ferramenta vai rodar isso automaticamente e te alertar se algum problema for encontrado. É muito mais prático utilizar uma ferramenta para te auxiliar nesse processo de integração contínua.

No próximo vídeo vamos aprender como faço para baixar, instalar e executar o Jenkins na minha máquina e começar a utilizar de fato o Jenkins. Vejo vocês lá.

Sobre o curso Jenkins: integração contínua

O curso Jenkins: integração contínua possui 123 minutos de vídeos, em um total de 41 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!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas