docker, jenkins e gradle para tomar o controle de sua entrega

62
@humbertostreb Docker, Jenkins e Gradle para tomar o controle de sua entrega

Upload: humberto-streb

Post on 21-Jan-2017

224 views

Category:

Software


2 download

TRANSCRIPT

@humbertostreb

Docker, Jenkins e Gradle para tomar o controle de

sua entrega

Humberto Streb

goleiro, bem meia-boca

entusiasta de programação funcional e automação

Agenda

- Continuous Delivery

- Overview do projeto

- Problemas encontrados

- Descrição das ações adotadas

- Ferramentas utilizadas

- Impacto na cultura

Continuous Delivery

O que é?Onde vive?

Do que se alimenta?

Continuous Delivery

"Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time."

Martin Fowler

CUIDADO!Nem toda mudança vai para produção

Testes

você tem que confiar que tudo vai funcionar

Qualidade

promova qualidade em tudo que é construído

Automação

pessoas pensam e máquinas executam

Feedback rápido

falhe, mas falhe rápido e de forma controlada

Pequenas alterações

dividir para conquistar

Controle de versão

controle a versão e compartilhe não apenas o código

+ poder para as pessoas

cada pessoa precisa ser treinada para ser responsável pelas alterações

Benefícios

- menor risco

- visão do progresso

- feedback do usuário

Evolução constante

alterações incrementais

Evolução constante

faça uma lista do que você vai fazer

alterações levam tempo

Overview do projeto

+1,3 milhões de linhas de código

+1k reports

processa arquivos com mais de 600 Mb

equipes distribuídas

Overview do projeto

muitos stakeholders

2 deploy em 6 meses

migração recente de desktop para web

e os primeiros passos na nuvem

Problemas

build gerado pela IDE

dependências compartilhadas pelo skype, e-mail entre outras tecnologias

Problemas

regras de negócio espalhadas por repositórios diferentes

configurações (dev, stage) fora do git

Projetos x dependências

Cadê o Jar que estava aqui?

Problemas

deploy manual

copiar e colar jars nos ambientes

dificuldade de atualizar as bibliotecas

Quando nós fomos chamados

Desenhar a solução

entendimento da solução

expõem os pontos de melhoria

e esses desenhos vão evoluindo

Docker

testes, databases configurados

prototipação

feedback rápido

Docker-compose

jenkins, artifactory e sonarqube rodam no docker

Por que escolhemos o gradle

o diretório src não seguia o padrão

versões dinâmicas 1.0.+

lifecycle flexível

wrapper

1ª etapa

não poderia impactar outras equipes

branch a parte

configuração individual de cada projeto

dependências dinâmicas

2ª etapa

unificação de repositórios com multi-project

adição do setup inicial do projecto no repositório

criação de um README com o setup

Repositório de artefatos

compartilhar dependências (the right way)

Jenkins builds

na minha máquina funciona...

não precisa de plugin para o gradle (self-contained)

geração automática de tag no repositório

Jenkins deploy

o build manda pro s3 e o deploy baixa e instala

Jenkins pipeline

Jenkinsfile no repositório

Gradle ajuda muito com as task individuais

Testes

adição de testes unitários

criação de um projeto para testes de integração que consultam o database

SonarQube

análise do codebase

reports baseados em mudanças

configurável

Projects

Issues

Qualidade

design e code review em pair

SonarQube scan diário

- correções imediatas das anomalias- ações tomadas com base nos reports

Substituição do system.out por log4j2

melhoria na qualidade do log

fundamental para adição de métricas em prod

It’s all about people

Overview cultural

o ambiente não era favorável à mudança

falta de confiança

distância entre business e dev

Mudança cultural

não apresente a solução completa, mas tenha ela em mente

faça pequenas correções, mas sempre faça

tradeoff tecnológico e comportamental

Mudança cultural

+ poder para as pessoas

definição de pronto clara

estimule um ambiente de aprendizado