Jenkins usa o catálogo de séries relacionadas ao tutorial
índice
Analise as razões
Uma breve análise do plugin Jenkins SVN não é atualizada para o código mais recente
Ao usar o Jenkins para integração contínua, encontrei uma situação em que o plug-in SVN do Jenkins não foi atualizado para o código mais recente.
Por exemplo, use Jenkins para atualizar o código imediatamente após o código ser enviado. Como resultado, o código que acabou de ser enviado não é atualizado e o código atualizado é a versão antiga.
Verifique o conteúdo relacionado online, há um ditado:
O horário do servidor Jenkins é inconsistente com o horário do servidor SVN. O plug-in SVN do Jenkins usa a tag de horário para fazer o download em vez de pegar o HEAD.
Portanto, se a hora do código de envio do servidor svn for posterior à hora atual do Jenkins, o código não será atualizado.
A solução para o problema é:
Basta definir a hora do servidor Jenkins e a hora do servidor SVN para serem iguais.
Sim, o procedimento acima resolve o problema, mas o plug-in SVN do Jenkins é uma revisão SVN relacionada ao carimbo de data / hora?
Verifique o registro de compilação de um Jenkins Job. Ao usar o plug-in SVN para atualizar o código, o registro é o seguinte:
Atualizando svn: // repository_path na revisão '2015-08-06T08: 48: 12.490 +0800'
Pode-se ver acima que a revisão correspondente a esta construção é de fato o carimbo de data / hora da construção.
Portanto, o plug-in Jenkins SVN pode atualizar o código e definir a revisão como HEAD?
A resposta é sim, basta adicionar o sufixo @HEAD ao URL do SVN. O plug-in SVN do Jenkins oferece suporte para isso.
Depois de adicionar o sufixo @HEAD ao URL SVN, a saída do log após a construção do Jenkins Job é a seguinte:
Atualizando svn: // repository_path @HEAD na revisão HEAD
E isso garante que o código atualizado esteja atualizado e não seja afetado pela diferença de horário entre o servidor Jenkins e o servidor SVN.
Nota: HEAD é a palavra-chave de revisão do SVN, o que significa a versão mais recente no repositório.
Veja o documento de ajuda de svn checkout / update por meio de svn help. Em relação à opção de revisão, a captura de tela é a seguinte:
Como pode ser visto acima, as opções de revisão são: NUMBER (número de revisão), '{' DATE '}' (registro de data e hora) e palavras-chave de revisão (HEAD, BASSE, COMMITTED, PREV).
Ao visualizar o código-fonte do plug-in Jenkins SVN:
Uma captura de tela de parte do código-fonte de WorkspaceUpdater.java é a seguinte:
A partir dos comentários, você pode ver a estratégia para obter a revisão do SVN:
// para a revisão SVN, usaremos o primeiro:
// - um sufixo @NNN do url SVN
// - um valor encontrado em RevisionParameterAction
// - a revisão correspondente ao timestamp de compilação
Pode-se observar que para a revisão do SVN, ela é obtida de acordo com a seguinte prioridade:
- sufixo @ NNN do url SVN (@NNN é revisão svn)
-O valor em RevisionParameterAction, RevisionParameterAction é usado principalmente para construção parametrizada para manter a consistência da revisão entre as duas construções
-Construa a revisão correspondente ao carimbo de data / hora
Antes, havia um pequeno erro no comentário e uma solicitação pull foi enviada para corrigi-lo:
https://github.com/jenkinsci/subversion-plugin/pull/130
referência:
http://blog.chinaunix.net/uid-26598889-id-3402223.html
http://www.tuicool.com/articles/B326v27
https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin
https://github.com/jenkinsci/subversion-plugin
solução
Em resumo, existem duas soluções:
1. Apenas defina a hora do servidor Jenkins e a hora do servidor SVN para serem iguais.
2. Ao construir jenkins, adicione @HEAD ao caminho SVN para forçar a versão de código mais recente
URL do repositório
http: // localhost: 9527 / svn / trunk / zhw @ HEAD