Como redefinir o número da compilação no Jenkins?


88

Estou usando Jenkins e Gradle para construir meu projeto java.

Cada vez que construo meu projeto, obtenho um novo número de construção na tela do Jenkins.

A seguir estão minhas informações de compilação do Jenkins:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

Quero redefinir o número da compilação do Jenkins como:

Success > Console Output  #1    03-Jan-2014 12:02:45

Como posso redefinir o número da compilação no Jenkins?

Respostas:


158

Pode ser feito mais facilmente a partir de um console de script bacana. Vá para http: // your-jenkins-server / script Na janela de script, digite:

item = Jenkins.instance.getItemByFullName("your-job-name-here")
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)

6
ou via clijava -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
ykhrustalev

3
Esta é definitivamente a melhor resposta. Você nem mesmo precisa do loop de exclusão se quiser apenas definir o número.
Nick

Por algum motivo, isso só executa a exclusão da compilação mais recente; no entanto, o seguinte funcionou para mim: echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
BRNTZN

Uma pergunta noob ... como eu sei o nome exato do trabalho.
Ammar Mujeeb

@AmmarMujeeb vá para o painel do Jenkins e você verá o nome do trabalho lá. Você também pode acessar /var/lib/jenkins/jobs/no Linux e o nome do diretório lá é o nome exato do trabalho
rickrizzo

62

A partir daqui

Dado que seu trabalho no Hudson se chama FooBar,

  • renomear FooBar para FooBar-Copy
  • crie um novo trabalho chamado FooBar, usando a opção 'Copiar trabalho existente', de FooBar-Copy
  • excluir FooBar-Copy

35
  • Primeiro limpe o espaço de trabalho e livre-se de compilações anteriores.
    • No servidor, navegue até o diretório de trabalho, por exemplo. 'var / lib / jenkins / jobs / myJob' exclui o espaço de trabalho e os diretórios de compilação, bem como quaisquer arquivos de pesquisa, lastSuccessful, lastStable, etc. Você deve ter apenas config.xml e lastBuildNumber.
    • Desligue Jenkins usando algo como serviço Jenkins Stop
    • Edite o arquivo chamado nextBuildNumber , inserindo 1 em vez do número da compilação atual
    • Iniciar Jenkins novamente, serviço Jenkins iniciar
    • Faça login no Jenkins, vá para o seu trabalho e clique em construir. Deve começar a construir o trabalho # 1

1
Isso foi muito útil. Obrigado.

22

Se você quiser definir o próximo número de compilação, há o plugin "NextBuildNumber" para isso. Mas isso não funcionará no seu caso porque o número de compilação de que você precisa, que é 1, é menor que o número de compilação atual.

Aqui é necessário limpar todas as compilações anteriores primeiro. Você pode fazer isso executando este script simples Vá para -> Gerenciar Jenkins -> Console de script

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }

Agora você pode definir o próximo número de compilação para 1 e executar a compilação. Vai começar com 1 . :) É simples assim.

Atualizar - o Jenkins agora tem um plug-in Purge Job History para fazer isso da maneira mais fácil. Confira a página para mais detalhes - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin


6

Para redefinir de forma mais geral seu número de compilação para N(onde Nnão é necessariamente 1):

  • Exclua quaisquer construções existentes onde buildNumber >= N.
  • Editar Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber. Defina o número que contém para N.
  • No Jenkins, selecione Manage Jenkins -> Reload Configuration from Disk.

Certifique-se de ler este defeito antes de selecionar "Recarregar configuração do disco" - issues.jenkins-ci.org/browse/JENKINS-32984
user3181500

6

Expandindo a resposta aceita, veja como fazer isso para todos os projetos de uma vez:

Jenkins.instance.allItems.each() { 
  item -> item.builds.each() { 
    build -> build.delete()
  }
  item.updateNextBuildNumber(1)
}  

4

Como extensão da excelente resposta de @antweiss, podemos ir mais longe ...

Não há necessidade de excluir todo o histórico de construção, se você não quiser, pode simplesmente voltar no tempo, para um ponto anterior:

resetNumberTarget = 14
item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
//println(item)

item.builds.each() { build ->
  //println(build)
  //println(build.number)

  if(build.number >= resetNumberTarget)
  {
    //println("About to Delete '" + build + "'")    
    build.delete()  
  }
}

item.updateNextBuildNumber(resetNumberTarget)

Se você quiser um manequim prazo, para verificar o que ele vai fazer, sem realmente fazê-lo, basta comentar as build.delete()e item.updateNextBuildNumber(resetNumberTarget)linhas e tire os vários comandos de impressão.


Documentação: os detalhes desses objetos eram difíceis de encontrar, mas identifiquei o seguinte:


1

Você pode usar o nexBuildNumberplug-in ou simplesmente modificar o nexBuildNumberarquivo para redefinir o número da compilação. A seguir estão as etapas que você precisa realizar:

  • Vá para .jenkins/Jobs/<YourJobName>/build/, faça backup desta pasta (se você precisar para uso futuro) e exclua a pasta de construção .

Observação: depois de limpar as construções antigas, você perde os históricos de construção e eles não estão mais disponíveis no painel do Jenkins.

  • Recarregue a configuração (Jenkins -> Gerenciar Jenkins).
  • Defina a próxima versão de compilação como 1 usando o plug-in Next Build Number ou modificando o nextBuildNumberarquivo no diretório de seu trabalho.

0

Eu encontrei uma maneira fácil de fazer isso.

  1. Limpe seu espaço de trabalho.
  2. Vá para cada build salvo no Jenkins e exclua-o.
  3. Defina o número da compilação como 1 e depois crie.

Jenkins usa a compilação anterior para determinar o próximo número da compilação, se o número da compilação que você inserir for menor do que o número da compilação anterior, o Jenkins aumentará automaticamente o número da compilação para um número maior do que a compilação anterior. Então aqui nós apenas


-1

Para redefinir os números de compilação de todos os trabalhos:

Jenkins.instance.getAllItems(AbstractProject.class).each {
    item = Jenkins.instance.getItemByFullName(it.fullName)
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
        build.delete()
    }
    item.updateNextBuildNumber(1)
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.