liberação Maven via Hudson
-
13-09-2019 - |
Pergunta
Eu sou a criação de Hudson de usar o plugin batch-tarefa para fazer lançamentos Maven para o nosso repositório interno. Estou fazendo isso por meio de:
mvn --batch-mode release:prepare
mvn --batch-mode release:perform
Estou interessado em outros métodos as pessoas têm usado e os prós e contras desses métodos. Além disso, todas as pessoas Gotchas já vi.
Solução
Eu tenho tendência a fazer os lançamentos sempre à mão por alguns motivos. Primeiro, se você tem que rolar para trás é mais fácil quando você pode voltar para o local de lançamento original e fazê-lo. Em segundo lugar, porque você precisa para resolver todas as dependências do instantâneo como parte do processo.
O nosso processo de desenvolvimento tem nos deixando dependências externo à compilação atual na versão anterior até que uma correção requer um upgrade. Isto significa que se eu estou liberando Nexus, Maven, etc, então eu ver instantâneos e isso significa que tenho que sair e liberar os primeiros. Este processo não é realmente possível automatizar uma vez que varia de acordo com o que mudou desde a última versão.
Dito isto, temos uma máquina especial (pelo Sonatype é apenas uma vm) configuração somente para compilações. Isto é feito para garantir há mudanças ambientais ocorrem que poderia influenciar uma compilação acidentalmente (como uma mudança jdk). Também torna mais fácil para qualquer um pegar o processo de liberação, porque é sempre pronto para ir.
Outras dicas
Recentemente, um plugin m2release veio a minha atenção. agradável parecia. Althought, eu teria gostado meu processo de liberação para ser completamente «pom-livre de ajustes». O que quero dizer com isso é que temos de fornecer 4 parâmetro de entrada para processar uma versão completa:
- a versão (ex. 1.0.0)
- a nova versão de desenvolvimento (ex. 1.0.1-SNAPSHOT)
- a tag lançamento em SCM (ex. Liberar-1.0.0 ou 1.0.0)
- o caminho base tag em SCM
O primeiro 2 têm padrões aceitáveis. A versão esbarrar na versão dígitos bug-fix está perfeitamente bem para mim.
Número 4 pode ser especificado no pom. Não vai mudar.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tagBase>https://example.com/svn/myProject/releases</tagBase>
</configuration>
</plugin>
É o terceiro que me impede de uma automação completa de um comunicado com o premir de um botão. A etiqueta de liberação padrão não vai fazer isso por nós, então nós temos que especificá-lo:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tag>release-${pom.version}</tag>
<tagBase>https://example.com/svn/myProject/releases</tagBase>
</configuration>
</plugin>
Agora, enquanto isso pode ser apenas o que eu precisava, eu acabo tendo uma tag svn com o -snapshot no final. :( Então eu tenho que passar o parâmetro tag na configuração do trabalho Hudson. Além disso, eu tenho que ir mudá-lo para cada versão fazemos ... o que não é exatamente o que eu preciso.
Assim, no final, ter um projeto tipo maven2 em Hudson + a m2release hudson plug-in + a liberação plugin Maven configurado corretamente é a mãe de todo o processo de liberação que eu vi até agora. Embora não seja perfeito, ele salvou-me uma obra tiedous muito.
JS.
Eu sempre provocou uma liberação manualmente com prós e contras óbvios: -)
Nós estamos experimentando com o plugin liberação Hudson Maven, embora eu sou um pouco desafiados com começá-lo para creditar adequadamente os lançamentos, sem males como codificar senhas em nossos arquivos de compilação.