Rupeal
RSSLinkedInTwitterFacebook

Arquivo para November, 2009

Novos ramos

Este post foca-se na estrutura do nosso repositório de controlo de versões e como este responde às necessidades de uma aplicação web.

Os exemplos dados são para o Subversion – que é o que nós usamos- mas a lógica do repositório pode ser usada noutros sistemas de controlo de versões.

O Problema

A aplicação está “live” e a ser usada por milhares de utilizadores.

Estás a desenvolver a próxima “killer feature”, mas precisas de continuamente aplicar correções à aplicação.

Como aplicar pequenas correções quando o código está em pleno desevolvimento, logo não estável?

Pior a aplicação deixou de responder, tens utilizadores pendurados, o repositório está num estado inconsistente, o que fazer?

PÂNICO!MEDO! Ir para agricultor?

Os mais aventureiros dirão, “editar o código live no servidor com o Vim”. Certo, mas não é solução para tudo. Precisamos de uma solução melhor.

Mas primeiro uma breve descrição dos ambientes que o nosso repositório tem de suportar.

Três Ambientes

No nosso caso temos três ambientes, onde desenvolvemos, testamos e corremos a nossa aplicação.

Desenvolvimento

Onde o desenvolvimento da aplicação é feito.

Staging

Onde testamos novas funcionalidades. O ambiente de Staging é o mais semelhante possível ao ambiente de produção, de modo a minimizar surpresas indesejadas aquando da passagem a produção.

Produção

Aquele que os nossos utilizadores vêm e usam. A versão mais estavél do nosso código.

Novos Ramos

Depois da aplicação estar em produção, ter apenas um ramo no controlo de versões rapidamentamente se torna um problema(acreditem em nós, já passamos por isso).

A nossa solução foi estruturar o repositório de modo a que este espelhasse os ambientes descritos anteriormente. Assim temos:

  • trunk – ramo de desenvolvimento.
  • branches/releases/live – ambiente de produção, a versão “live” da aplicação.
  • branches/releases/edge – ambiente de staging, onde novas features são testadas
  • branches/fixes – onde correções mais complexas são efectuadas.
  • tags/fixes – marcar o inicio e o fim das correções mais complexas.
  • tags/releases – marcar as transições das releases da nossa aplicação, normalmente equivalem a um sprint.

Esta estrutura permite-nos alterar o código de produção ou staging sem seream afectados por novas features em desenvolvimento, pois estão em ramos separados.

Exemplos

Seguem-se alguns exemplos mais concretos.

Pequenas correções

Para aplicar pequenas correções podemos faze-lo directamente no branch de produção e depois junta-las ao ramo de desenvolvimento e staging.

Para tal basta anotar qual a revisão gerada com a correção e efectuar o merge.

svn merge -r37:38 svn://repository/branches/live
svn commit -m "Merge r38 fix bug 3134"

Sempre que possível devemos utilizaesta alternativa, ao invés de …

Ainda mais dificil

Em correções mais demoradas, onde são necessárias varias revisões e/ou vários developers criamos uma sandbox.

Primeiro criamos o branch para a correção.

svn copy -m "create bugfix branch" \\
    svn://repository/branches/current \\
    svn://repository/branches/fixes/3345-BUG

Depois criamos uma tag para marcar o principio da correção no branch

svn copy -m "bugfix start" \\
    svn://repository/branches/3345-BUG \\
    svn://repository/tags/3345-PRE

Fazemos checkout do novo branch.

svn co svn://repository/branches/BUG-3345

Neste momento podemos fazer as correções e aplicar os commits que forem necessários sem qualquer precupação de poluir o branch principal.

Quando terminada a correção, precisamos de aplica-la nos outros branches.

Criamos uma tag a marcar o fim da correção

svn copy -m "bugfix end" \\
    svn://repository/branches/3345-BUG \\
    svn://repository/tags/3345-POST

Agora utilizamos as duas tags para aplicar a correção aos branches desejados

3345-BUG$ cd..
project$  cd current
current$  svn merge svn://repository/tags/3345-PRE \\
          svn://repository/tags/3345-POST

Depois de testada a correção é só fazer commit, e todos na equipa terão acesso a esta.

# be sure to test everything
current$  svn commit -m "Merge bug fix  3345"

Esta opção é mais complicado, no entanto oferece maior flexibilidade.

Resumindo e concluindo

Ter uma aplicação web “live” cria um “conflito” entre o desenvolvimento de novas features e correções que precisam de ser aplicadas imediatamente.

O repositório de código já não pode ter apenas um ramo.

É necessário definir uma estrutura para o repositório e um conjunto de regras a serem aplicadas por toda a equipa.

Arrumar o repositório utilizando os mecanismos disponibilizados pelo controlo de versões como:

  • criação de ramos,
  • criação de tags/marcas
  • facilidade em fazer merges

Aplicando estes principios conseguimos ter desenvolvimento activo e aplicar correções quase instântaneas ao ambiente “live”, mantendo a aplicação o melhor e mais estável possível.

E vocês como “arrumam” o vosso código?

Bruno Coelho on November 27th, 2009

Tips, Web Development

4
 

João Ferreira

Gostaríamos de dar as boas vindas ao João Ferreira, que integrou esta semana a equipa da RUPEAL.

O João estudou Informática e Gestão na ESCO e recentemente esteve envolvido em vários projectos .NET. É fanático por desporto, sobretudo por snowboard, surf e futebol, sendo o Sporting o seu clube de eleição.

Esta semana juntou-se à Ana Ferreira num novo projecto profissional.

Bem-vindo João!

marta.frazao on November 27th, 2009

People

0
 

Ana Ferreira

A equipa da RUPEAL conta com mais um elemento na equipa, a Ana Ferreira. A Ana licenciou-se em Engenharia Informática pela Escola Superior de Tecnologia de Viseu e tem um gosto particular pela música, tendo aprendido a tocar bandolim desde muito cedo. Iniciou hoje um novo projecto profissional onde irá certamente acrescentar valor!

Bem-vinda Ana!

marta.frazao on November 18th, 2009

People

0
 

RUPEAL development setup

Na RUPEAL temos a convicção de que a productividade dos colaboradores depende directamente da qualidade do material com que trabalham.

Como são actualmente estações de trabalho na RUPEAL?

photo

Hardware:

  • Imac’s dual core de 20″ com 4GB de ram / MacBook de 13.3″ com 2Gb;
  • 2º ecrã de 22″ (1680×1050);

Software:

  • OS X Snow Leopard;
  • Textmate – O nosso “pau para toda a obra” O Textmate é o editor de texto por excelência, usado por developers e designers para fazer todo o código subjacente aos nossos trabalhos, possuí um muito bom suporte a macros, é extensível através de bundles e plugins e tem syntax highlighters para a maioria das linguagens de programação;
  • Safari / Firefox – O Safari é o browser de eleição, superando o Firefox sobretudo pelo uso de menos recursos, memória principalmente. O que se torna importante quanto o número de tabuladores abertos é constantemente superior a 20. O firefox vale sobretudo pela extensibilidade fornecida através dos inúmeros plugins disponíveis, dos quais destacamos o “grande” firebug, a ferramenta por excelência para fazer debug em HTML, CSS e Javascript;
  • SequelPro – O nosso navegador de BD’s MySQL, sendo uma ferramenta grátis, o SequelPro, principalmente desde o último update, apresenta-se como um eficiente navegador para BD’s MySQL, sendo rápido e funcional;
  • Versions – Versions é o nosso cliente de SVN, usamo-lo para tudo o que é controlo de versões na RUPEAL como cliente para o nosso repositório online, o Beanstalk. É funcional e apresenta uma interface muito bem conseguida, apesar de não suportar completamente as funcionalidaes mais avançadas, como é o caso do “merge”.
  • DropBox – O Dropbox é usado para sincronizar entre os vários postos de trabalho pastas com recursos especificos, de forma a que todos disponham desses mesmos recursos de forma rápida e eficiente;
  • Transmit – O nosso client de sftp,  usado sobretudo para aceder a alguns dos alojamentos com que trabalhamos, quando há necessidade de fazer upload ou download dos mesmos.

Menções honrosas: Adium, Itunes, Tweetie.

Quais são as vossas soluções?

Rui Alves on November 10th, 2009

People, Software Development

2