2016-01-22 14 views
12

Przenoszę zadanie Jenn-Workflow do nowego zadania opartego na szablonie przepływu pracy. Ponieważ numer kompilacji jest używany jako część wersji artefaktów kompilacji, przepływ pracy powoduje, że muszę uruchomić numer kompilacji nowego przepływu pracy o numerze większym niż stary przepływ pracy. Niestety wtyczka "Next Build Number" nie działa z potokiem przepływu pracy.Ustaw numer kompilacji dla przepływów pracy Jenkins (potok)

Ktoś wie, jak to zrobić?

Odpowiedz

6

Spróbuj uruchomić poniżej skryptu w Jenkins Script konsoli .. Zmień "Workflow" do JobName

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

Ten fragment kodu nie pisze nowy numer kompilacji do pliku 'nextBuildNumber'. Z tego powodu, jeśli (z wdziękiem) ponownie uruchomisz Jenkinsa, a następnie uruchomisz kompilację, kończy się to na tym, że numer kompilacji był obecny w pliku 'nextBuildNumber' (a nie podanym w powyższym fragmencie). Użycie 'job.saveNextBuildNumber()' zamiast 'job.save()' rozwiązuje ten problem. – Amit

0

Znalazłem też inny sposób robi to za pomocą "Jenkins-CLI. Działa na zablokowanym instalacjach, w których dostęp do konsoli skryptu nie jest dostępna (Cloudbees Przedsiębiorstwo Jenkins)

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

Ewentualnie można dodać fragment podobnego do rurociągu/Workflow DSL praca skrypt (aka Jenkinsfile):

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

To jest dokładnie to, czego potrzebowałem! –

7

Niestety, powyższe metody nie działały dla mnie podczas korzystania z folderów. I uciekają się do następujących czynności w konsoli skryptu Jenkins:

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

Jeśli używałem 'job.saveNextBuildNumber()' dla linii 3, działało to dla mojego potoku multi-branch. –

+0

Aby znaleźć nazwę zadania z potoku rozgałęzionego, uruchom: 'def jobs = Jenkins.getInstance(). GetAllItems(); println (Praca) ' a następnie, jak opisano powyżej @DavidV: ' pracę def = Jenkins.instance.getItemByFullName ("YourTeam/your_project/dysponuje% 2Fbranchname"); job.nextBuildNumber = 301; job.saveNextBuildNumber(); ' – kivagant

2

Kilka uwag:

  • Jenkins Praca i foldery nie są serializacji. Trzeba użyć @NonCPS
  • Wyłącz Groovy piaskownicy, jak globalne jak Jenkins.instance nie są dostępne w inny sposób
  • Jenkins.instance.getItem() nie będą dobrze pracować z folderami. Użyj Jenkins.instance.getItemByFullName przeciwko env.JOB_NAME
  • Ustawianie job.nextBuildNumber odbędzie efekt kolejnej kompilacji, więc śmiało i skopać następny
  • Upewnij się wrócić ze swojego rurociągu więc budować inicjujący nie kontynuować zły numer kompilacji

Kod:

@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 
} 
Powiązane problemy