26
Branch & Merge Claudio Leite

Branch & Merge Claudio Leite. Sobre @claudiobernardo

Embed Size (px)

Citation preview

Page 1: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Branch & MergeClaudio Leite

Page 2: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Sobre

http://blog.lambda3.com.br/

@claudiobernardo

Page 3: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Agenda

Conceitos

Básicos

Demonstração

O que estratégias de Branch

tentam resolver ?

Estratégias de Branch:

Por Release

Estratégias de Branch:

Por QualidadeEstratégia

s de Branch:

Por Feature

Page 4: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Cenário

“Uma empresa de médio porte está em franco crescimento, aproveitando oportunidades do mercado. Suas aplicações estão se tornando mais complexas e o time de desenvolvedores está crescendo. Nos últimos anos, a empresa tem sofrido com uma demanda crescente por suporte, devido constantes falhas no software em produção. A qualidade do software gerado pelos times é sofrível e essa percepção tem crescido no mercado. A empresa espera continuar crescendo, mas precisa corrigir e evitar novos problemas com a gestão de seu processo de desenvolvimento de software. Recentemente, a empresa ouviu falar sobre as novas tendências no desenvolvimento ágil e os benefícios da abordagem para Modern Apps.”

Page 5: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

CONCEITOS BÁSICOS

Page 6: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Controlador de Versão• É um repositório que contém os arquivos necessários para o

desenvolvimento do seu projeto• Mantém Controle sobre quais mudanças ocorreram:

• Quem ?• O que ?• Quando ?• Porque ?

• É um dos princípios básicos do ciclo de desenvolvimento de software e que ajuda para que os desenvolvedores trabalhem colaborativamente

• Usa conceitos básicos como check-out, check-in, get latest, labeling ...

Page 7: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Branch• Branch permite que seja realizado desenvolvimento em paralelo

– Implementando features diferentes em branches diferentes com a mesma base de código

– Mantém diferentes releases em branches diferentes

• Branch == Isolar / Isolamento• Estratégias Comuns:

– Branch por Release– Branch por Feature– Branch por Time– Branch por Qualidade

• Regra Básica: NÃO CRIE BRANCH! Apenas quando necessário (KISS)• Branch não é Label!

Page 8: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Merge• Merge é uma operação de reconciliação de

código.• Possibilidade de Merge automático• Merge permite que você passe as mudanças de

um branch para o outro– Forward Integration– Reverse Integragion Main

R1

R1.1

R2

R2.1

FI for ReleaseFI for Release

Page 9: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

O QUE BRANCH TENTA RESOLVER ?

Page 10: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

O que Branch Tenta Resolver ?

• Release Code When it is Ready

• Independent Construction of Features

• Suspension of Coding

• Know what code is Released

• Quando o código de Release está Pronto• Construção Independente de Features• Suspensão de Código – Code Freezen• Saber Qual Código foi liberado para Release

Page 11: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

BRANCH POR RELEASE

Page 12: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Branch por Release (Staircase)

R1 B

R2 B

R3

Test ProduçãoC1

C2 Test Produção

Test

Page 13: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Bugs

R1 B

R2 B

R3

Test ProduçãoRIC1 C3

C2 Test Produção

Test

C4 RI

RI C5 RI

C6 RI

?

?

Page 14: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Pros & ConsPros :• Modelo mais simples de

ser usado• Modelo mais simples para

manter uma única versão• Mesmo processo para

hotfix ou acertos da release

• Menor gerência de Branches

Cons :• Não é muito flexível quanto

os outros padrões• Quanto mais release ativos,

mais complicado realizar FI• Necessidade de multiplos

ambientes de testes• Não suporta desenvolvimento

em paralelo• Necessidade de recriação de

builds para cada release

Page 15: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

BRANCH POR QUALIDADE

Page 16: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Branch por Qualidade (Basic Plan)

Dev

QA

Prod

B

B RI

Page 17: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Branch por Qualidade (Safe Keeping)main

test

prod

B

B RI

B B

Safe Keeping R1

Safe Keeping R2

Page 18: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Bugs no Branch de QA

dev

QA

Prod

B

B RI

FI

L1BUG B

HF

L1

RI

FI

L2

RI

FI

Rx

RI RI

Page 19: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Bugs no Branch de Produção

dev

QA

Prod

B

B RI

FI

L-QA1

Bug

B

HF

RI

FI

RI

FIRI

FI

L-QA2L-QA3

L-QA4

L-QA5

RI

Release 1 Release 2 Release 3

RI

FI

L-QA2

Page 20: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Pros & ConsPros :• Permite maior

Flexibilidade• Facilidade para

trabalhar com multiplos Branches

Cons :• Dependendo da

estrutura elaborada pode ser muito complexa

• Requer uma pessoa dedica para gerenciar sua estrutura e compilação

• Sem documentação, você pode ser perder e não saber mais onde está o seu código.

Page 21: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

BRANCH POR FEATURE

Page 22: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Branch por Feature

RI

RI

RI

feature1

feature 2

feature 3

FIFIB FI

mainFI FI FI

feature 4

B

Page 23: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Bug

RI

RI

RI

feature1

feature 2

feature 3

FIFIB FI

mainFI FI FI

feature 4

BBug

Page 24: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Pros & ConsPros :• Separa o desenvolvimento

das features• Permite uma flexibilidade

para escolher o que vai no seu release

• Facilita o debug (problema em uma feature não afeta outra)

• Ajuda no trabalho com features que dependem de um tempo maior de desenvolvimento

Cons :• Pode ficar muito complicado • Os times responsáveis pelas

features devem sempre lembrar de sincronizar com o Branch de DEV

• Pode complicar um pouco a vida de desenvolvedores que estão trabalhando em mais de uma feature

• Exige pelo menos um ambiente de testes por cada feature

• As vezes pode ser necessário mais de um Branch de Integração

Page 25: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

BRANCH POR FEATURE VS2012 Demonstração

Page 26: Branch & Merge Claudio Leite. Sobre  @claudiobernardo

Obrigado !