2015-12-10 13 views
7

mehrfach verzweigten Mit mehrfach verzweigten Workflow auf den Befehl sieht Besuche wieSaubere baut mit Workflow-

checkout scm 

kann ich nicht einen Weg finden, Jenkins zu sagen, eine saubere Kasse durchzuführen. Mit "sauber" meine ich, dass es alle Dateien aus dem Arbeitsbereich entfernen sollte, die nicht der Versionskontrolle unterliegen.

+3

weiß ich nicht, ob 'checkout' weitere Parameter nehmen können in mehrfach verzweigten ich mir vorstellen, gibt es eine elegante Lösung, aber wenn Sie Git verwenden, sollten Sie in der Lage sein, 'sh 'git clean -fdx'' auszuführen nach dem 'checkout'-Schritt. –

Antwort

4

Ich bin nicht sicher, ob dies die ursprüngliche Frage beantwortet oder nicht (ich sagen könnte, nicht, wenn die Absicht zu verlassen ist, einige Dateien im Arbeitsbereich), aber warum nicht nur den Arbeitsbereich zuerst entfernen, das eine saubere Kasse ermöglichen würde.

stage ('Clean') { 
    deleteDir() 
} 

stage ('Checkout') { 
    checkout scm 
} 
2

Erstens können Sie nicht davon ausgehen, dass ein Workflow-Job einen Arbeitsbereich wie für Freestyle-Jobs hat. Tatsächlich kann ein Workflow-Job mehr als einen Arbeitsbereich verwenden (einen für jeden node oder ws Block).

Gesagt, was ich vorschlagen werde ist eine Art von Hacky: Ändern Sie das SCM-Objekt vor der Kasse, um eine CleanCheckout Erweiterung einzurichten (Sie müssen einige Anrufe dort genehmigen).

import hudson.plugins.git.extensions.impl.CleanCheckout 
scm.extensions.replace(new CleanCheckout()) 
checkout scm 

Aber ich würde Christopher Orr Vorschlag bevorzugen, verwenden Sie ein Shell Schritt nach checkout (sh 'git clean -fdx').

+0

Danke dafür. Das Problem mit beiden Vorschlägen ist, dass es nur mit Git funktioniert. –

+0

Es gibt Entsprechungen für die meisten SCM-Implementierungen. Zum Beispiel können Sie für subversion 'scm.setWorkspaceUpdater (new UpdateWithCleanUpdater())' – amuniz

+0

Wo kann ich die Dokumentation zu diesen Dingen finden? (Ich benutze Hg.) –

-1

Jenkins enthält derzeit eine Seite zum Erzeugen einer groovigen Pipeline-Syntax. Wenn Sie den Checkout-Schritt auswählen, sollten Sie alle zusätzlichen Optionen hinzufügen können, die Sie gewohnt sind.

erzeugte ich die folgenden, die tun sollten, was Sie wollen:

checkout poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: 'ssh://repo/location.git']]] 
+1

Diese Antwort funktioniert nur bei normalen Pipeline-Jobs, funktioniert aber nicht bei Multibranch-Pipeline-Jobs. –

0

ich in das gleiche Problem laufen und hier ist meine Abhilfe. Ich habe ein neues scm-Objekt für die Kasse erstellt und die Erweiterungen mit dem CleanBeforeCheckout erweitert. Aber ich habe die anderen Konfigurationen wie Filialen und userRemoteConfigs behalten.

checkout([ 
    $class: 'GitSCM', 
    branches: scm.branches, 
    extensions: scm.extensions + [[$class: 'CleanBeforeCheckout']], 
    userRemoteConfigs: scm.userRemoteConfigs 
]) 

Es ist immer noch nicht perfekt, weil Sie ein neues Objekt reate haben :(