Nesta apresentação conheceremos a jornada e lições aprendidas de um sysadmin praticando a cultura DevOps ao implantar sistemas monolíticos da forma tradicional e microsserviços usando pipelines no Jenkins
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. 4
DesenvolvimentoDesenvolvimento OperaçãoOperação
Metologias Ágeis Disponibilidade
Integração Contínua Persistência de dados (storage)
Correção de bugs Segurança
Ambiente para testes Backup
Versionamento de código Configurações específicas
Sprints Logs
Processos de desenvolvimento Monitoramento
Geração de código Alertas
Merges Métricas
Coleta de requisitos Escalabilidade
Reuniões e mais reuniões Rollback
Documentação Orquestração
Suporte ao usuário Deploy de aplicações
Rollback Documentação
Deploy de aplicações Suporte ao usuário
Responsabilidade Complementares
6. 6
●
Euquipe por quase 7 anos
●
Ótimo relacionamento com o time de desenvolvimento
●
No início era um sistema monolítico...
●
Integração do código (merge de branches) manual
●
Dores de implantação e gerenciamento de vários
monolíticos em produção...
●
Migração dos Monolíticos para os microsserviços
– Migração do SVN para o Git
– Spring Cloud Config https://spring.io/projects/spring-cloud-config
– Jhipster Framework https://www.jhipster.tech
– Orquestração, monitoramento, conteinerização e CI/CD
com: Puppet, Zabbix, Docker, Jenkins
Experiências de um Sysadmin DevOps numa
empresa de desenvolvimento de software
7. A relação entre as etapas...
7
ContinuosContinuos
DeliveryDelivery
ContinuosContinuos
IntegrationIntegration
ContinuosContinuos
DeployDeploy
Fonte: https://goo.gl/1Y9NJu
8. Processo
O que o Jenkins pretende modificar
8
Fonte: https://goo.gl/1Y9NJu
9. O que é ?
9
É 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.
10. Características
10
●
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
●
Vários temas disponíveis http://afonsof.com/jenkins-material-theme
●
Documentação: https://jenkins.io/doc
●
Fácil instalação em várias plataformas https://jenkins.io/download
●
Mantido pela Cloudbees https://www.cloudbees.com e pela
comunidade de desenvolvedores.
11. História
11
●
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.
12. Blue Ocean
12
●
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
●
Documentação:
https://jenkins.io/doc/book/blueocean
14. Pipeline no Jenkins
14
●
É 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.
●
Todos os aspectos do processo são visualizados graficamente
●
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
17. Um caso de uso
Ferramentas usadas no pipeline
17
18. Sobre o Gogs …
18
“É 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
19. Sobre e
19
●
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.
20. Sobre o ...
20
●
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.
21. Sobre o ...
21
“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.
22. Sobre o ...
22
“É 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
23. A aplicação web
23
●
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
24. Ciclo da execução do Pipeline
Interações entre aplicações e VMs
24
Jenkins
Master
Node
Slave Prod
Interações entre as VMs