Nesta apresentação conheceremos as definições de Integração, Entrega e Implantação Contínua e como o uso do Jenkins possibilita a criação de pipelines que ajudam as equipes de desenvolvimento, testes, qualidade e operação na entrega de produtos com maior qualidade aos clientes.
Também será apresentado o uso do Jenkins em conjunto com o Gitlab, SonarQube, Maven, Nexus, Docker e Terraform, que é o tema central do livro Integração contínua com Jenkins, publicado em Fevereiro/2019 pela editora Novatec.
3. A cultura
Palestra: A relação entre o ágil e o DevOps
Marcell Castelo Branco https://www.youtube.com/watch?v=XrRrc37lUzk
Palestra: O poder da abstração: desafios técnicos e culturais do “Ops” para o DevOps
Daniel Requena https://t.co/soyugYTeC3
3
4. O que é Continuos Integration?
4
“É uma prática que consiste em integrar o
código com maior frequencia, identificar
problemas de integração do código e corrigí-los
mais rapidamente, resultando em menos bugs,
automatização de testes, feedbacks mais
frequentes e entrega mais rápida e confiável do
software.”
John Fergurson Smart
http://shop.oreilly.com/product/0636920010326.do
5. O que é Continuos Delivery?
5
“É a capacidade de obter alterações de todos os
tipos - incluindo novos recursos, alterações de
configuração, correções de bugs e experimentos
- no ambiente de produção com segurança e
rapidez, de maneira sustentável.”
Jez Humble
https://tinyurl.com/hyqzxve
6. O que é Continuos Deploy?
6
Pode ser entendido como a
Implantação (Deploy) Contínua
de novas versões do software
no ambiente de produção,
resultante da Integração
Contínua.
7. A relação entre as etapas...
7
O Continuos Integration e o Continuos
Delivery englobam as etapas envolvidas
desde um commit até a geração da versão
estável e candidata a ser implantada no
ambiente de produção.
O Continuos Deployment requer o pleno
funcionamento do Continuos Integration e
Continuos Delivery.
8. A relação entre as etapas...
8
ContinuosContinuos
DeliveryDelivery
ContinuosContinuos
IntegrationIntegration
ContinuosContinuos
DeployDeploy
Fonte: https://goo.gl/1Y9NJu
9. Processo
O que o Jenkins pretende modificar
9
Fonte: https://goo.gl/1Y9NJu
10. O que é ?
10
É uma ferramenta de Integração Contínua
de código fonte aberto e desenvolvido em
Java.
Pode ser usado para realizar a Integração
Contínua em projetos de diversos
tamanhos e com linguagens e tecnologias
variadas, tais como: .NET, Ruby, Groovy,
Grails, PHP, Python, Java e muito mais.
11. Características
11
●
Disponível nas versões Release (semanal) e LTS (a cada 12
semanas);
●
Licença MIT e código aberto https://github.com/jenkinsci/jenkins;
●
Mais de 1600 plugins https://plugins.jenkins.io
●
Suporte a Pipeline como código
●
Fácil customização
●
Vários temas disponíveis http://afonsof.com/jenkins-material-theme
●
Documentação: https://jenkins.io/doc
●
Gerencia credenciais de integração com outros sistemas
●
Suporte a Active Directory, LDAP
●
Fácil instalação em várias plataformas https://jenkins.io/download
●
Gratuito
●
Suporte a múltiplos nodes
●
Suporte a múltiplas branches
●
Suporte a linguagem Groovy
●
E muito mais...
●
Mantido pela Cloudbees https://www.cloudbees.com e pela
comunidade de desenvolvedores.
12. História
12
●
O Jenkins era conhecido pelo nome de Hudson.
●
Foi desenvolvido como um hobby por Kohsuke
Kawaguchi em 2004, quando trabalhava na Sun.
●
Quando a Oracle comprou a Sun em 2009, acabou
herdando a base de código do Hudson.
●
No início de 2011, as tensões entre a Oracle e a
comunidade de desenvolvedores aumentaram e houve
uma ruptura.
●
O projeto foi dividido em dois: o Jenkins, administrado
pela maioria dos desenvolvedores iniciais, e o próprio
Hudson, que permaneceu sob o controle do Oracle.
13. Configuration as Code - CasC
13
●
Código fonte aberto
https://github.com/jenkinsci/configuration-as-code-plugin
●
Plugin usado para configurar o Jenkins como código, utilizando o padrão
YAML https://pt.wikipedia.org/wiki/YAML
●
Iniciado Set/2017 por Ewelina Wilkosz e mantido também engenheiros de
software da CloudBees e comunidade.
●
Primeira release estável lançada em Set/2018.
●
Mais informações em:
https://goo.gl/S7M7oB
https://www.praqma.com/stories/jenkins-configuration-as-code
https://goo.gl/HM3iur
https://wiki.jenkins.io/display/JENKINS/Configuration+as+Code+Plugin
https://www.cloudbees.com/blog/jenkins-configuration-code-look-ma-no-hand
s
https://www.cloudbees.com/blog/jenkins-configuration-code-migration
https://www.cloudbees.com/blog/jenkins-configuration-code-documentation
https://www.cloudbees.com/blog/jenkins-configuration-code-plugins
https://www.cloudbees.com/blog/jenkins-configuration-code-sensitive-data
https://www.cloudbees.com/blog/jenkins-configuration-code-need-speed
15. Blue Ocean
15
●
Plugin que adiciona dashboards e recursos visuais deixando a
visualização, edição e execução do pipeline mais intuitiva e
elegante.
https://jenkins.io/projects/blueocean
●
Visualizações sofisticadas dos pipelines
●
Editor de pipeline
●
Personalização para atender às necessidades baseadas em
funções de cada membro da equipe de desenvolvimento.
●
Identificação precisa de quando há necessidade de
intervenção ou quando surgem problemas na execução do
pipeline.
●
Integração nativa a branches e pull request
●
A intenção da comunidade do Jenkins e desenvolvedores do
plugin Blue Ocean é que ele ganhe mais melhorias e
funcionalidades para paulatinamente substituir a interface
clássica do Jenkins
●
Documentação: https://jenkins.io/doc/book/blueocean
17. Pipeline no Jenkins
17
●
É uma sequência de tarefas automatizadas que podem ser divididas
em etapas e representa uma parte do processo de compilação,
teste, verificação da qualidade do código e entrega do software.
●
Plugin criado em 2017 que permite criar e executar o pipeline como
código.
●
Agrupamento de tarefas em stages
●
Todos os aspectos do processo são visualizados graficamente
●
Feedback: os membros da equipe aprendem sobre qualquer
problema assim que ocorrem
●
Consiste em dois tipos de elementos básicos: stage e step
●
Usa uma sintaxe declarativa simples e compreensível (Jenkinsfile).
●
Documentação:
https://jenkins.io/doc/book/pipeline
https://jenkins.io/doc/book/pipeline/syntax
https://jenkins.io/doc/book/pipeline/jenkinsfile
https://jenkins.io/doc/pipeline/steps
https://jenkins.io/doc/book/pipeline/docker
https://tinyurl.com/y8kgqwl8
20. Um caso de uso
Ferramentas usadas no pipeline
20
21. Sobre o Gogs …
21
“É um sistema web capaz de gerenciar inúmeros repositórios
git para fazer o controle de versão do código fonte de
softwares, semelhante ao GitHub, Gitlab e Bitbucket, mas que
mais simples e leve.“
●
No pipeline, o Gogs é usado para armazenar uma cópia de
todos os códigos usados fontes da aplicação, dockerfiles e
jenkinsfile.
●
O Gogs também envia notificações ao Jenkins sempre que
houver um push, geração de tag ou solicitação de merge
numa determinada branch.
●
A partir dessas notificações, o Jenkins inicia a execução de
uma série de jobs para implementar a integração contínua.
●
Mais informações em: https://gogs.io
22. Sobre e
22
●
O Apache Maven https://maven.apache.org é
importante para compilar uma aplicação Java,
gerenciando uma série de dependências de pacotes.
●
No pipeline, o Maven é gerado para gerar o pacote da
aplicação Java a ser encapsulado numa imagem Docker.
●
O Sonatype Nexus
https://www.sonatype.com/nexus-repository-oss é um
dos muitos repositórios de pacotes de software, que
serve para armazenar organizadamente cada arquivo
gerado para cada versão da aplicação.
●
No pipeline, o Nexus é usado para armazenar uma cópia
de todos os artefatos gerados com o uso do Apache
Maven.
23. Sobre o ...
23
●
O SonarQube https://www.sonarqube.org é
sistema de código fonte aberto usado para fazer
a análise contínua da qualidade do código fonte
de uma aplicação. Tem suporte a Java, PHP,
Python, Ruby, C e muitas outras linguagens de
programação.
●
No pipeline, o SonarQube é integrado ao maven
para analisar a qualidade do código fonte e a
cobertura de testes unitários de uma aplicação
web desenvolvida em Java.
24. Sobre o ...
24
“Platarforma de software que provê o gerenciamento de
conteineres, que encapsulam as dependências
necessárias para executar uma aplicação.”
●
Mais informações em:
http://docker.com
http://blog.aeciopires.com/primeiros-passos-com-docker
●
No pipeline, o Docker é usado para gerar as imagens
Docker, contendo a aplicação web, arquivos de
configuração, script de inicialização e dependências de
software.
●
Além disso, o DockerHub ou Docker Registry pode ser
usado para armazenar as imagens Docker a serem
executadas como conteineres nos ambientes de teste,
homologação e produção.
25. Sobre o ...
25
“É uma ferramenta que gerencia a infraestrutura como
código provisionando um ambiente completo para
que uma aplicação funcione, seja numa nuvem pública,
privada ou outro serviço externo.”
●
Código fonte aberto:
https://github.com/hashicorp/terraform
●
Suporte a Windows, Linux, MacOS, Solaris, FreeBSD,
OpenBSD.
●
Disponível nas versões Open Source e Enterprise
●
Mais informações em: https://www.terraform.io/docs
26. A aplicação web
26
●
Desenvolvida em Java, usando SpringBoot e Thymeleaf
●
Um CRUD (Create, Read, Update, Delete)
●
Um formulário simples que recebe e exibe informações do
usuário
●
Desenvolvida por Janaína Militão
https://github.com/janainamilitao/applivro-jenkins
27. Ciclo da execução do Pipeline
Interações entre aplicações e VMs
27
Jenkins
Master
Node
Slave Prod
Interações entre as VMs
31. Suporte e Documentação do Jenkins
31
●
Suporte comercial realizado através da CloudBees
https://www.cloudbees.com
●
No Brasil, a Instruct http://instruct.com.br é parceira da CloudBees.
●
Documentação do Jenkins https://jenkins.io/doc
●
Wiki Jenkins https://wiki.jenkins.io
●
Plugins do Jenkins https://plugins.jenkins.io
●
Comunidade JenkinsCI-BR – https://tinyurl.com/bqkbbuw
●
Canais de interação na comunidade internacional:
●
https://jenkins.io/participate
●
https://jenkins.io/chat
●
https://jenkins.io/mailing-lists
●
Jenkins Style Guide https://tinyurl.com/y8kgqwl8