2016-01-22 19 views
12

Sto migrando il lavoro jenkins-workflow al nuovo lavoro del flusso di lavoro basato su modello. Poiché il numero di build viene utilizzato come parte della versione delle risorse di build generate dal flusso di lavoro, è necessario avviare il numero di build del nuovo flusso di lavoro con un numero maggiore del flusso di lavoro precedente. Sfortunatamente il plug-in "Next Build Number" non funziona con la pipeline del flusso di lavoro.Imposta il numero di build per il workflow Jenkins (pipeline) build

Qualcuno conosce un buon modo per fare questo?

risposta

6

Provate a lanciare sotto script Jenkins Console Script .. Change "flusso di lavoro" al tuo job name

def job = Jenkins.instance.getItem("workFlow") 
job.nextBuildNumber = 10 
job.saveNextBuildNumber() 
+2

Questo frammento di codice non scrive il nuovo numero di build per il file 'nextBuildNumber'. A causa di ciò, se (con garbo) si riavvia Jenkins e poi si attiva una build, si finisce usando qualsiasi numero di build presente nel file 'nextBuildNumber' (e non quello specificato nello snippet sopra). L'uso di 'job.saveNextBuildNumber()' invece di 'job.save()' risolve questo problema. – Amit

0

Ho anche trovato un altro modo di fare questo usando 'Jenkins-cli. Funziona per le installazioni bloccato in cui l'accesso alla sezione comandi di script non è disponibile (CloudBees Enterprise Jenkins)

java -jar jenkins-cli.jar -s https://instanceURL/ \ 
      set-next-build-number workflow-name 33 
12

Oppure, si potrebbe aggiungere un frammento come questo per il tuo Pipeline/Workflow script di processo DSL (aka Jenkinsfile):

offset = 5 
currentBuild.displayName = "#" + (currentBuild.number + offset) 
+0

Questo è esattamente ciò di cui avevo bisogno! –

7

Sfortunatamente i metodi sopra elencati non hanno funzionato per me quando si utilizzano le cartelle. Ho fatto ricorso al seguente nella console script di Jenkins:

job = Jenkins.getInstance().getItemByFullName("BSKAzureConversion-Jobs/master", Job.class) 
job.nextBuildNumber = 92 
job.save() 
+1

Se si utilizza 'job.saveNextBuildNumber()' per la riga 3, questo ha funzionato per la mia pipeline multigrazione. –

+0

Per trovare il nome del tuo lavoro dalla pipeline multi-ramo, esegui questo: 'def jobs = Jenkins.getInstance(). GetAllItems(); println (posti di lavoro) ' e poi, come @DavidV sopra descritte: ' lavoro def = Jenkins.instance.getItemByFullName ("YourTeam/your_project/dispone% 2Fbranchname"); job.nextBuildNumber = 301; job.saveNextBuildNumber(); ' – kivagant

2

Alcune note:

  • Jenkins Jobs e cartelle non sono serializzabile. Necessità di utilizzare @NonCPS
  • Disabilita Groovy Sandbox, come globali come Jenkins.instance non sono accessibili altrimenti
  • Jenkins.instance.getItem() non funziona bene con le cartelle. Utilizzare Jenkins.instance.getItemByFullName contro il env.JOB_NAME
  • Impostazione job.nextBuildNumber avrà effetto generazione successiva, in modo da andare avanti e dare il via il prossimo
  • Assicurati di tornare dalla vostra tubazione in modo l'accumulo di avvio del procedimento non continua con il cattivo numero di build

codice:

@NonCPS 
def updateBuildNumber(build_number) { 
    def job = Jenkins.instance.getItemByFullName(env.JOB_NAME, Job.class) 
    job.nextBuildNumber = build_number 
    job.saveNextBuildNumber() 
    build env.JOB_NAME 
    return true 
} 
Problemi correlati