VERSIONING STRATEGY
MAVEN
MAVENVERSIONING STRATEGY
MAVENVERSIONING STRATEGY
SUBVERSION
SUBVERSION
O Subversion ou simplesmente SVN, é um sistema de controle de versão
desenvolvido para ser o substituto do CVS....
GITVERSUS SUBVERSION
GITVERSUS SUBVERSION
SUBVERSION	

Arquitetura centralizada (Cliente-Servidor)	

Depende de uma conexão de rede estabelecid...
GITVERSUS SUBVERSION
SUBVERSION	

!
!
!
!
GITVERSUS SUBVERSION
GIT	

Arquitetura distribuída (peer-to-peer)	

Não depende de conexão para realizar o “commit" do cód...
GITVERSUS SUBVERSION
GIT 	

(peer-to-peer)	

commit/update local	

!
!
!
!
GITVERSUS SUBVERSION
GIT 	

Pull: Atualiza o repositório local com todas as
alterações feitas em outro repositório.	

!
Pu...
GITVERSUS SUBVERSION
No centralizado, os desenvolvedores trabalham no mesmo branch, seja esse a Trunk ou um branch.	

!
!
...
GITVERSUS SUBVERSION
Comparativo de operações no modelo centralizado e distribuído
GITVERSUS SUBVERSION
Qual é o melhor?	

!
	

 Depende do seu cenário de trabalho!
MAVENVERSIONING STRATEGY
MAVENVERSIONING STRATEGY
FOCA no objetivo!
MAVEN
O que é o Maven?	

	

 Ferramenta para gerenciamento de dependências e construção
de artefatos (projetos).
MAVEN
Como é o processo hoje para construir, versionar, publicar no
repositório (Nexus) e realizar o deploy da aplicação n...
MAVEN
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
1.	

 Cria-se o projeto com maven e define a versão inicial 1.0.0
2.	

 Adiciona funcionalidades ao projeto durante o...
MAVEN
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
5.	

 Realiza a construção do artefato (build do...
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
5.	

 Realiza a construção do artefato (build do...
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
5.	

 Realiza a construção do artefato (build do...
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
5.	

 Realiza a construção do artefato (build do...
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
5.	

 Realiza a construção do artefato (build do...
MAVEN
4.	

 Envia (commit) o código para o servidor de controle de
versão
5.	

 Realiza a construção do artefato (build do...
MAVEN
8.	

 Antes de colocar em produção, publica-se no ambiente de
testes e posteriormente homologação.
MAVEN
MAVEN
release + 1 ?
MAVEN
release + 1 ? Quando?
MAVEN
release + 1 ? Quando?
MAVEN
release + 1 ? Quando?
MAVEN
release + 1 ? Quando?
MAVEN
release + 1 ? Quando?
Como?
MAVEN
1 . ? . ?
release + 1 ? Quando?
Como?
MAVEN
1 . ? . ? - ?
release + 1 ? Quando?
Como?
MAVEN
Qual estratégia utilizar para incrementar a versão do projeto?
1 . ? . ? - ?
release + 1 ? Quando?
Como?
SNAPSHOTS
Primeiro de tudo, SNAPSHOT não é a mesma coisa que alpha/beta
ou milestone. É uma palavra-chave que significa a ú...
RELEASES
Então o que é uma release?	

Release não significa que a sua versão está pronta para ir à produção.	

Significa que...
RELEASES
Então o que é uma release?	

Release não significa que a sua versão está pronta para ir à produção.	

Significa que...
RELEASES
Então o que é uma release?	

Release não significa que a sua versão está pronta para ir à produção.	

Significa que...
RELEASES
Então o que é uma release?	

Release não significa que a sua versão está pronta para ir à produção.	

Significa que...
RELEASES
Então o que é uma release?	

Release não significa que a sua versão está pronta para ir à produção.	

Significa que...
RELEASES
Então o que é uma release?	

Release não significa que a sua versão está pronta para ir à produção.	

Significa que...
VERSIONING STRATEGY
VERSIONING STRATEGY
Maven strategy:	

<major>.<minor>.<incremental>-<qualifier>
VERSIONING STRATEGY
Maven strategy:	

<major>.<minor>.<incremental>-<qualifier>
Ex. plataforma-1.5.5-RC
VERSIONING STRATEGY
Maven strategy:	

<major>.<minor>.<incremental>-<qualifier>
Estratégia de alguns fornecedores de mercad...
VERSIONING STRATEGY
Maven strategy:	

<major>.<minor>.<incremental>-<qualifier>
Estratégia de alguns fornecedores de mercad...
VERSIONING STRATEGY
Spring framework release keywords
VERSIONING STRATEGY
JBoss Community release keywords
VERSIONING STRATEGY
JBoss Community release keywords
VERSIONING STRATEGY
JBoss Community release keywords	

!
major.minor.micro.Alpha[n]	

major.minor.micro.Beta[n]	

major.mi...
General Availability
General Availability
General Availabilityalmost final release
General Availabilityalmost final release
for test only
General Availabilityalmost final release
for test only
General Availabilityalmost final release
final tested release
for test only
General Availabilityalmost final release
final tested release
for test only
General Availabilityalmost final release
final tested release
for test only
for test only
General Availabilityalmost final release
final tested release
for test only
for test only
General Availabilityalmost final release
For all announcements of releases ...
VERSIONING STRATEGY
Temos ainda,	

as keywords milestone no lugar das tradicionais alpha, beta, etc. 	

Também utilizado e...
VERSIONING STRATEGY
<major>.<minor>.<patch>[-<type>-<attempt>]
<major> – é usado para indicar mudanças significativas na
ap...
VERSIONING STRATEGY
1 . 0 . 0
<major>.<minor>.<patch>[-<type>-<attempt>]
<major> – é usado para indicar mudanças significat...
VERSIONING STRATEGY
<minor> – Este número indica um conjunto de pequenas alterações
como a inclusão de uma nova funcionali...
VERSIONING STRATEGY
<minor> – Este número indica um conjunto de pequenas alterações
como a inclusão de uma nova funcionali...
VERSIONING STRATEGY
<patch> – Indicado para representar correções de bugs que não
podem esperar até que a próxima versão fi...
VERSIONING STRATEGY
<patch> – Indicado para representar correções de bugs que não
podem esperar até que a próxima versão fi...
VERSIONING STRATEGY
[<type>-<attempt>] – Esta última parte é opcional e é usada para indicar que o
release não é necessari...
VERSIONING STRATEGY
[<type>-<attempt>] – Esta última parte é opcional e é usada para indicar que o
release não é necessari...
VERSIONING STRATEGY
major.minor.micro.Alpha[n]	

major.minor.micro.Beta[n]	

major.minor.micro.CR[n]	

major.minor.micro.F...
VERSIONING STRATEGY
major.minor.micro.Alpha[n]	

major.minor.micro.Beta[n]	

major.minor.micro.CR[n]	

major.minor.micro.F...
VERSIONING STRATEGY
major.minor.micro.Alpha[n]	

major.minor.micro.Beta[n]	

major.minor.micro.CR[n]	

major.minor.micro.F...
VERSIONING STRATEGY
VERSIONING STRATEGY
Maven release plugin
VERSIONING STRATEGY
final do sprint #1
Maven release plugin
VERSIONING STRATEGY
final do sprint #1
Maven release plugin
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare
Maven release plugin
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare
Maven release plugin
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
1.	

 Verifica se não existe a...
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
1.	

 Verifica se não existe a...
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
1.	

 Verifica se não existe a...
VERSIONING STRATEGY
final do sprint #1 mvn release:prepare v.1.0.0.RC-01
Maven release plugin
1.	

 Verifica se não existe a...
VERSIONING STRATEGY
Maven release plugin
VERSIONING STRATEGY
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
mvn release:perform
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
mvn release:perform
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
mvn release:perform
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
mvn release:perform
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
mvn release:prepare
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
mvn release:prepare
checkout	

da	

TAG
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
mvn release:prepare
checkout	

da	

TAG
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
mvn release:prepare
checkout	

da	

TAG build
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
mvn release:prepare
checkout	

da	

TAG
deploy
...
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
mvn release:prepare
checkout	

da	

TAG
deploy
...
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
5.	

 Faz o checkout do código da TAG criada an...
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
5.	

 Faz o checkout do código da TAG criada an...
VERSIONING STRATEGY
mvn release:perform
v.1.0.0.RC-01
Maven release plugin
5.	

 Faz o checkout do código da TAG criada an...
VERSIONING STRATEGY
e agora?
VERSIONING STRATEGY
Jenkins (CruiseControl, Hudson, etc.)
VERSIONING STRATEGY
Jenkins (CruiseControl, Hudson, etc.)
VERSIONING STRATEGY
Jenkins (CruiseControl, Hudson, etc.)
VERSIONING STRATEGY
Jenkins, próximos passos:
VERSIONING STRATEGY
Jenkins, próximos passos:
VERSIONING STRATEGY
Jenkins, próximos passos:
Configurar o Jenkins realizar o build da aplicação, executar os testes
integr...
VERSIONING STRATEGY
Jenkins, próximos passos:
Configurar o Jenkins realizar o build da aplicação, executar os testes
integr...
VERSIONING STRATEGY
VERSIONING STRATEGY
Commit
VERSIONING STRATEGY
Commit
VERSIONING STRATEGY
Commit
VERSIONING STRATEGY
Commit
VERSIONING STRATEGY
Commit
VERSIONING STRATEGY
Commit
svn polling
VERSIONING STRATEGY
Commit
svn polling
VERSIONING STRATEGY
Commit
svn polling
VERSIONING STRATEGY
Commit
svn polling
build
VERSIONING STRATEGY
Commit
svn polling
build
VERSIONING STRATEGY
Commit
svn polling
build
integration tests
VERSIONING STRATEGY
Commit
svn polling
build
integration tests
VERSIONING STRATEGY
Commit
svn polling
build
integration tests
VERSIONING STRATEGY
Commit
deploy
svn polling
build
integration tests
VERSIONING STRATEGY
Commit
deploy
svn polling
build
Maven	

release pluginintegration tests
VERSIONING STRATEGY
Commit
deploy
svn polling
build
Maven	

release pluginintegration tests
VERSIONING STRATEGY
Commit
deploy
svn polling
build
Maven	

release pluginintegration tests
VERSIONING STRATEGY
Commit
deploy
svn polling
build
Maven	

release plugin
deploy
integration tests
VERSIONING STRATEGY
Commit
deploy
svn polling
build
Maven	

release plugin
deploy
WebSphere Application Server
integration...
VERSIONING STRATEGY
OBRIGADO
MARCUS CARVALHO	

@marcus_dev
Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)
Próximos SlideShares
Carregando em…5
×

Maven Versioning Strategy (VR)

587 visualizações

Publicada em

Entendendo o versionamento de código e estratégias de integração e deploy contínuo.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
587
No SlideShare
0
A partir de incorporações
0
Número de incorporações
4
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Maven Versioning Strategy (VR)

  1. 1. VERSIONING STRATEGY
  2. 2. MAVEN
  3. 3. MAVENVERSIONING STRATEGY
  4. 4. MAVENVERSIONING STRATEGY
  5. 5. SUBVERSION
  6. 6. SUBVERSION O Subversion ou simplesmente SVN, é um sistema de controle de versão desenvolvido para ser o substituto do CVS. Fundado em 2000 pela CollabNet, Inc., e desenvolvido como um projeto da Apache Software Foundation. A versão 1.0 do Subversion (lançada em 23 de Fevereiro de 2004) possui vantagens em relação ao seu concorrente mais antigo CVS, como por exemplo ”commits" mais atômicos e releases mais consistentes. Atualmente na versão 1.8 (Junho de 2013) http://subversion.apache.org/docs/release-notes/
  7. 7. GITVERSUS SUBVERSION
  8. 8. GITVERSUS SUBVERSION SUBVERSION Arquitetura centralizada (Cliente-Servidor) Depende de uma conexão de rede estabelecida com o repositório central Funciona muito bem quando o repositório central está na mesma rede local.
  9. 9. GITVERSUS SUBVERSION SUBVERSION ! ! ! !
  10. 10. GITVERSUS SUBVERSION GIT Arquitetura distribuída (peer-to-peer) Não depende de conexão para realizar o “commit" do código Atende equipes com centenas de desenvolvedores Funciona bem quando a equipe está espalhada em diversas filiais da empresa O repositório “central”, quando existe, tem o papel do repositório “oficial” e não como processador central das requisições. Maior complexidade
  11. 11. GITVERSUS SUBVERSION GIT (peer-to-peer) commit/update local ! ! ! !
  12. 12. GITVERSUS SUBVERSION GIT Pull: Atualiza o repositório local com todas as alterações feitas em outro repositório. ! Push: Envia as alterações do repositório local para um outro repositório. ! A sincronização entre os desenvolvedores acontece de repositório a repositório e não existe, um repositório mais importante que o outro, embora o papel de um repositório central possa ser usado para convencionar o fluxo de trabalho.
  13. 13. GITVERSUS SUBVERSION No centralizado, os desenvolvedores trabalham no mesmo branch, seja esse a Trunk ou um branch. ! ! O modelo distribuído é mais complicado. Na arquitetura peer-to-peer, os branches e os merges aparentemente desordenados podem tornar o grafo da evolução do projeto confuso à primeira vista. ! !
  14. 14. GITVERSUS SUBVERSION Comparativo de operações no modelo centralizado e distribuído
  15. 15. GITVERSUS SUBVERSION Qual é o melhor? ! Depende do seu cenário de trabalho!
  16. 16. MAVENVERSIONING STRATEGY
  17. 17. MAVENVERSIONING STRATEGY FOCA no objetivo!
  18. 18. MAVEN O que é o Maven? Ferramenta para gerenciamento de dependências e construção de artefatos (projetos).
  19. 19. MAVEN Como é o processo hoje para construir, versionar, publicar no repositório (Nexus) e realizar o deploy da aplicação no servidor de aplicações (WebSphere)?
  20. 20. MAVEN
  21. 21. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0
  22. 22. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0
  23. 23. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum)
  24. 24. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum)
  25. 25. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum) 3. Antes do pacote de change, altera-se a versão do pom.xml manualmente.
  26. 26. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum) 3. Antes do pacote de change, altera-se a versão do pom.xml manualmente.
  27. 27. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum) 3. Antes do pacote de change, altera-se a versão do pom.xml manualmente. altera a versão…
  28. 28. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum) 3. Antes do pacote de change, altera-se a versão do pom.xml manualmente. altera a versão… release + 1
  29. 29. MAVEN 1. Cria-se o projeto com maven e define a versão inicial 1.0.0 2. Adiciona funcionalidades ao projeto durante o sprint (Scrum) 3. Antes do pacote de change, altera-se a versão do pom.xml manualmente. altera a versão… release + 1 COMO ASSIM???
  30. 30. MAVEN
  31. 31. MAVEN 4. Envia (commit) o código para o servidor de controle de versão
  32. 32. MAVEN 4. Envia (commit) o código para o servidor de controle de versão
  33. 33. MAVEN 4. Envia (commit) o código para o servidor de controle de versão
  34. 34. MAVEN 4. Envia (commit) o código para o servidor de controle de versão
  35. 35. MAVEN 4. Envia (commit) o código para o servidor de controle de versão 5. Realiza a construção do artefato (build do projeto)
  36. 36. MAVEN 4. Envia (commit) o código para o servidor de controle de versão 5. Realiza a construção do artefato (build do projeto)
  37. 37. MAVEN 4. Envia (commit) o código para o servidor de controle de versão 5. Realiza a construção do artefato (build do projeto) profile websphere, lembrou?
  38. 38. MAVEN 4. Envia (commit) o código para o servidor de controle de versão 5. Realiza a construção do artefato (build do projeto) 6. Publica o artefato no maven proxy (em breve Nexus) profile websphere, lembrou?
  39. 39. MAVEN 4. Envia (commit) o código para o servidor de controle de versão 5. Realiza a construção do artefato (build do projeto) 6. Publica o artefato no maven proxy (em breve Nexus) profile websphere, lembrou?
  40. 40. MAVEN 4. Envia (commit) o código para o servidor de controle de versão 5. Realiza a construção do artefato (build do projeto) 6. Publica o artefato no maven proxy (em breve Nexus) 7. Quando dá vontade, faz a branch da TAG da versão profile websphere, lembrou?
  41. 41. MAVEN 8. Antes de colocar em produção, publica-se no ambiente de testes e posteriormente homologação.
  42. 42. MAVEN
  43. 43. MAVEN release + 1 ?
  44. 44. MAVEN release + 1 ? Quando?
  45. 45. MAVEN release + 1 ? Quando?
  46. 46. MAVEN release + 1 ? Quando?
  47. 47. MAVEN release + 1 ? Quando?
  48. 48. MAVEN release + 1 ? Quando? Como?
  49. 49. MAVEN 1 . ? . ? release + 1 ? Quando? Como?
  50. 50. MAVEN 1 . ? . ? - ? release + 1 ? Quando? Como?
  51. 51. MAVEN Qual estratégia utilizar para incrementar a versão do projeto? 1 . ? . ? - ? release + 1 ? Quando? Como?
  52. 52. SNAPSHOTS Primeiro de tudo, SNAPSHOT não é a mesma coisa que alpha/beta ou milestone. É uma palavra-chave que significa a última versão do seu código. Aquela em desenvolvimento! Ou seja, ela muda! Se você fizer o checkout do código ‘plataforma-1.5.0-SNAPSHOT' hoje e baixar a mesma versão mais tarde, muito provavelmente ele NÃO será o mesmo. Isto também significa que se o seu projeto depende de uma versão SNAPSHOT, o maven precisará checar o repositório remoto por mudanças toda hora que você compilar o projeto.
  53. 53. RELEASES Então o que é uma release? Release não significa que a sua versão está pronta para ir à produção. Significa que o desenvolvedor decidiu que a este ponto do desenvolvimento o código deve ser “lockado”, ou seja, não irá se perder ou ser alterado. Talvez o time de desenvolvimento quer apenas distribuir este código, seja como uma biblioteca para outras áreas que precisam se adiantar em suas tarefas, ou instalá-lo em um ambiente (servidor) de testes. Isto significa que uma release pode ser:
  54. 54. RELEASES Então o que é uma release? Release não significa que a sua versão está pronta para ir à produção. Significa que o desenvolvedor decidiu que a este ponto do desenvolvimento o código deve ser “lockado”, ou seja, não irá se perder ou ser alterado. Talvez o time de desenvolvimento quer apenas distribuir este código, seja como uma biblioteca para outras áreas que precisam se adiantar em suas tarefas, ou instalá-lo em um ambiente (servidor) de testes. Isto significa que uma release pode ser: alpha
  55. 55. RELEASES Então o que é uma release? Release não significa que a sua versão está pronta para ir à produção. Significa que o desenvolvedor decidiu que a este ponto do desenvolvimento o código deve ser “lockado”, ou seja, não irá se perder ou ser alterado. Talvez o time de desenvolvimento quer apenas distribuir este código, seja como uma biblioteca para outras áreas que precisam se adiantar em suas tarefas, ou instalá-lo em um ambiente (servidor) de testes. Isto significa que uma release pode ser: alpha beta
  56. 56. RELEASES Então o que é uma release? Release não significa que a sua versão está pronta para ir à produção. Significa que o desenvolvedor decidiu que a este ponto do desenvolvimento o código deve ser “lockado”, ou seja, não irá se perder ou ser alterado. Talvez o time de desenvolvimento quer apenas distribuir este código, seja como uma biblioteca para outras áreas que precisam se adiantar em suas tarefas, ou instalá-lo em um ambiente (servidor) de testes. Isto significa que uma release pode ser: alpha beta release candidate
  57. 57. RELEASES Então o que é uma release? Release não significa que a sua versão está pronta para ir à produção. Significa que o desenvolvedor decidiu que a este ponto do desenvolvimento o código deve ser “lockado”, ou seja, não irá se perder ou ser alterado. Talvez o time de desenvolvimento quer apenas distribuir este código, seja como uma biblioteca para outras áreas que precisam se adiantar em suas tarefas, ou instalá-lo em um ambiente (servidor) de testes. Isto significa que uma release pode ser: alpha beta release candidate patch
  58. 58. RELEASES Então o que é uma release? Release não significa que a sua versão está pronta para ir à produção. Significa que o desenvolvedor decidiu que a este ponto do desenvolvimento o código deve ser “lockado”, ou seja, não irá se perder ou ser alterado. Talvez o time de desenvolvimento quer apenas distribuir este código, seja como uma biblioteca para outras áreas que precisam se adiantar em suas tarefas, ou instalá-lo em um ambiente (servidor) de testes. Isto significa que uma release pode ser: alpha beta release candidate patch production
  59. 59. VERSIONING STRATEGY
  60. 60. VERSIONING STRATEGY Maven strategy: <major>.<minor>.<incremental>-<qualifier>
  61. 61. VERSIONING STRATEGY Maven strategy: <major>.<minor>.<incremental>-<qualifier> Ex. plataforma-1.5.5-RC
  62. 62. VERSIONING STRATEGY Maven strategy: <major>.<minor>.<incremental>-<qualifier> Estratégia de alguns fornecedores de mercado: <major>.<minor>.<patch>[-<type>-<attempt>] Ex. plataforma-1.5.5-RC
  63. 63. VERSIONING STRATEGY Maven strategy: <major>.<minor>.<incremental>-<qualifier> Estratégia de alguns fornecedores de mercado: <major>.<minor>.<patch>[-<type>-<attempt>] Ex. plataforma-1.5.5-RC Ex. plataforma-1.5.0-RC-05
  64. 64. VERSIONING STRATEGY Spring framework release keywords
  65. 65. VERSIONING STRATEGY JBoss Community release keywords
  66. 66. VERSIONING STRATEGY JBoss Community release keywords
  67. 67. VERSIONING STRATEGY JBoss Community release keywords ! major.minor.micro.Alpha[n] major.minor.micro.Beta[n] major.minor.micro.CR[n] major.minor.micro.Final
  68. 68. General Availability
  69. 69. General Availability
  70. 70. General Availabilityalmost final release
  71. 71. General Availabilityalmost final release
  72. 72. for test only General Availabilityalmost final release
  73. 73. for test only General Availabilityalmost final release
  74. 74. final tested release for test only General Availabilityalmost final release
  75. 75. final tested release for test only General Availabilityalmost final release
  76. 76. final tested release for test only for test only General Availabilityalmost final release
  77. 77. final tested release for test only for test only General Availabilityalmost final release For all announcements of releases of our community projects, we should not use the term GA (General Availability) or Production. … split between community releases and long-term stable product releases (introduced in July, 2007 with EAP 4.2),
  78. 78. VERSIONING STRATEGY Temos ainda, as keywords milestone no lugar das tradicionais alpha, beta, etc. Também utilizado em alguns projetos da RedHat. ! major.minor.micro.TIMESTAMP-Mn major.minor.micro.CR[n] major.minor.micro.Final
  79. 79. VERSIONING STRATEGY <major>.<minor>.<patch>[-<type>-<attempt>] <major> – é usado para indicar mudanças significativas na aplicação. Ela pode ser também uma total reescrita da versão anterior, gerando incompatibilidade de código.
  80. 80. VERSIONING STRATEGY 1 . 0 . 0 <major>.<minor>.<patch>[-<type>-<attempt>] <major> – é usado para indicar mudanças significativas na aplicação. Ela pode ser também uma total reescrita da versão anterior, gerando incompatibilidade de código.
  81. 81. VERSIONING STRATEGY <minor> – Este número indica um conjunto de pequenas alterações como a inclusão de uma nova funcionalidade, representando por exemplo os Sprints de uma 'estória', baseado na metodologia Scrum. Esta sempre será compatível com a versão anterior! <major>.<minor>.<patch>[-<type>-<attempt>]
  82. 82. VERSIONING STRATEGY <minor> – Este número indica um conjunto de pequenas alterações como a inclusão de uma nova funcionalidade, representando por exemplo os Sprints de uma 'estória', baseado na metodologia Scrum. Esta sempre será compatível com a versão anterior! 1 . 0 . 0 <major>.<minor>.<patch>[-<type>-<attempt>]
  83. 83. VERSIONING STRATEGY <patch> – Indicado para representar correções de bugs que não podem esperar até que a próxima versão fique pronta. Nunca deverá incluir funcionalidades, apenas correções e deverá ser compatível com versões anteriores. <major>.<minor>.<patch>[-<type>-<attempt>]
  84. 84. VERSIONING STRATEGY <patch> – Indicado para representar correções de bugs que não podem esperar até que a próxima versão fique pronta. Nunca deverá incluir funcionalidades, apenas correções e deverá ser compatível com versões anteriores. 1 . 0 . 0 <major>.<minor>.<patch>[-<type>-<attempt>]
  85. 85. VERSIONING STRATEGY [<type>-<attempt>] – Esta última parte é opcional e é usada para indicar que o release não é necessariamente estável (production). Não é um número, mas um texto, como por exemplo: beta-01, RC-01, GA, etc. Quando a versão é estável, pode-se omitir este texto ou utilizar a nomenclatura respectiva, como: FINAL, RELEASE <major>.<minor>.<patch>[-<type>-<attempt>]
  86. 86. VERSIONING STRATEGY [<type>-<attempt>] – Esta última parte é opcional e é usada para indicar que o release não é necessariamente estável (production). Não é um número, mas um texto, como por exemplo: beta-01, RC-01, GA, etc. Quando a versão é estável, pode-se omitir este texto ou utilizar a nomenclatura respectiva, como: FINAL, RELEASE 1 . 0 . 0 - RC -01 <major>.<minor>.<patch>[-<type>-<attempt>]
  87. 87. VERSIONING STRATEGY major.minor.micro.Alpha[n] major.minor.micro.Beta[n] major.minor.micro.CR[n] major.minor.micro.Final
  88. 88. VERSIONING STRATEGY major.minor.micro.Alpha[n] major.minor.micro.Beta[n] major.minor.micro.CR[n] major.minor.micro.Final
  89. 89. VERSIONING STRATEGY major.minor.micro.Alpha[n] major.minor.micro.Beta[n] major.minor.micro.CR[n] major.minor.micro.Final
  90. 90. VERSIONING STRATEGY
  91. 91. VERSIONING STRATEGY Maven release plugin
  92. 92. VERSIONING STRATEGY final do sprint #1 Maven release plugin
  93. 93. VERSIONING STRATEGY final do sprint #1 Maven release plugin
  94. 94. VERSIONING STRATEGY final do sprint #1 mvn release:prepare Maven release plugin
  95. 95. VERSIONING STRATEGY final do sprint #1 mvn release:prepare Maven release plugin
  96. 96. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin
  97. 97. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin
  98. 98. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin
  99. 99. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin 1. Verifica se não existe alteração pendente no repositório local
  100. 100. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin 1. Verifica se não existe alteração pendente no repositório local 2. Checa se existe dependencias por SNAPSHOTS
  101. 101. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin 1. Verifica se não existe alteração pendente no repositório local 2. Checa se existe dependencias por SNAPSHOTS 3. É solicitado o nome da TAG, da release e da próxima versão de desenvolvimento (ENTER)
  102. 102. VERSIONING STRATEGY final do sprint #1 mvn release:prepare v.1.0.0.RC-01 Maven release plugin 1. Verifica se não existe alteração pendente no repositório local 2. Checa se existe dependencias por SNAPSHOTS 3. É solicitado o nome da TAG, da release e da próxima versão de desenvolvimento (ENTER) 4. A branch da TAG da release atual é criada automaticamente no SVN
  103. 103. VERSIONING STRATEGY Maven release plugin
  104. 104. VERSIONING STRATEGY Maven release plugin mvn release:prepare
  105. 105. VERSIONING STRATEGY Maven release plugin mvn release:prepare
  106. 106. VERSIONING STRATEGY mvn release:perform Maven release plugin mvn release:prepare
  107. 107. VERSIONING STRATEGY mvn release:perform Maven release plugin mvn release:prepare
  108. 108. VERSIONING STRATEGY mvn release:perform Maven release plugin mvn release:prepare
  109. 109. VERSIONING STRATEGY mvn release:perform Maven release plugin mvn release:prepare
  110. 110. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin mvn release:prepare
  111. 111. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin mvn release:prepare checkout da TAG
  112. 112. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin mvn release:prepare checkout da TAG
  113. 113. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin mvn release:prepare checkout da TAG build
  114. 114. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin mvn release:prepare checkout da TAG deploy build
  115. 115. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin mvn release:prepare checkout da TAG deploy build
  116. 116. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin 5. Faz o checkout do código da TAG criada anteriormente mvn release:prepare checkout da TAG deploy build
  117. 117. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin 5. Faz o checkout do código da TAG criada anteriormente 6. Executa o ciclo de vida de build do maven (clean, build, test, install) mvn release:prepare checkout da TAG deploy build
  118. 118. VERSIONING STRATEGY mvn release:perform v.1.0.0.RC-01 Maven release plugin 5. Faz o checkout do código da TAG criada anteriormente 6. Executa o ciclo de vida de build do maven (clean, build, test, install) 7. Realiza o deploy do artefato instalado localmente no repositório remoto (Nexus) mvn release:prepare checkout da TAG deploy build
  119. 119. VERSIONING STRATEGY e agora?
  120. 120. VERSIONING STRATEGY Jenkins (CruiseControl, Hudson, etc.)
  121. 121. VERSIONING STRATEGY Jenkins (CruiseControl, Hudson, etc.)
  122. 122. VERSIONING STRATEGY Jenkins (CruiseControl, Hudson, etc.)
  123. 123. VERSIONING STRATEGY Jenkins, próximos passos:
  124. 124. VERSIONING STRATEGY Jenkins, próximos passos:
  125. 125. VERSIONING STRATEGY Jenkins, próximos passos: Configurar o Jenkins realizar o build da aplicação, executar os testes integrados, preparar a tag da versão no SVN, publicar o artefato no repositório remoto e por fim, efetuar o deploy da aplicação em ambiente de testes.
  126. 126. VERSIONING STRATEGY Jenkins, próximos passos: Configurar o Jenkins realizar o build da aplicação, executar os testes integrados, preparar a tag da versão no SVN, publicar o artefato no repositório remoto e por fim, efetuar o deploy da aplicação em ambiente de testes.
  127. 127. VERSIONING STRATEGY
  128. 128. VERSIONING STRATEGY Commit
  129. 129. VERSIONING STRATEGY Commit
  130. 130. VERSIONING STRATEGY Commit
  131. 131. VERSIONING STRATEGY Commit
  132. 132. VERSIONING STRATEGY Commit
  133. 133. VERSIONING STRATEGY Commit svn polling
  134. 134. VERSIONING STRATEGY Commit svn polling
  135. 135. VERSIONING STRATEGY Commit svn polling
  136. 136. VERSIONING STRATEGY Commit svn polling build
  137. 137. VERSIONING STRATEGY Commit svn polling build
  138. 138. VERSIONING STRATEGY Commit svn polling build integration tests
  139. 139. VERSIONING STRATEGY Commit svn polling build integration tests
  140. 140. VERSIONING STRATEGY Commit svn polling build integration tests
  141. 141. VERSIONING STRATEGY Commit deploy svn polling build integration tests
  142. 142. VERSIONING STRATEGY Commit deploy svn polling build Maven release pluginintegration tests
  143. 143. VERSIONING STRATEGY Commit deploy svn polling build Maven release pluginintegration tests
  144. 144. VERSIONING STRATEGY Commit deploy svn polling build Maven release pluginintegration tests
  145. 145. VERSIONING STRATEGY Commit deploy svn polling build Maven release plugin deploy integration tests
  146. 146. VERSIONING STRATEGY Commit deploy svn polling build Maven release plugin deploy WebSphere Application Server integration tests
  147. 147. VERSIONING STRATEGY OBRIGADO MARCUS CARVALHO @marcus_dev

×