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.

Foi útil?

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:

  1. a versão (ex. 1.0.0)
  2. a nova versão de desenvolvimento (ex. 1.0.1-SNAPSHOT)
  3. a tag lançamento em SCM (ex. Liberar-1.0.0 ou 1.0.0)
  4. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top