2015-12-10 12 views
7

Utilizzando multiramo del flusso di lavoro, il comando per verificare assomigliaClean costruisce con multiramo Workflow

checkout scm 

non riesco a trovare un modo per dire Jenkins per eseguire un checkout pulito. Con "pulito", voglio dire che dovrebbe rimuovere tutti i file dallo spazio di lavoro che non sono sotto controllo di versione.

+3

io non so se 'checkout' può prendere ulteriori parametri in multiramo immagino che ci sia un altro soluzione elegante, ma se usi Git, dovresti essere in grado di eseguire 'sh 'git clean -fdx'' dopo il passaggio 'checkout'. –

risposta

4

Non sono sicuro se questo risponde alla domanda originale o meno (io non riuscivo a capire se l'intenzione era di lasciare alcuni file nell'area di lavoro), ma perché non solo rimuovere l'area di lavoro prima, questo permetterebbe un checkout pulito:.

stage ('Clean') { 
    deleteDir() 
} 

stage ('Checkout') { 
    checkout scm 
} 
2

Innanzitutto, non si può presumere che un lavoro del flusso di lavoro abbia un'area di lavoro come per i lavori di stile libero. In realtà, un lavoro di flusso di lavoro può utilizzare più di uno spazio di lavoro (uno per ogni blocco node o ws).

Detto questo, quello che ho intenzione di proporre è una specie di hacky: modificare l'oggetto scm prima del checkout per configurare un'estensione CleanCheckout (dovrete approvare alcune chiamate lì).

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

Ma io preferirei la proposta di Christopher Orr, utilizzare un passo shell dopo checkout (sh 'git clean -fdx').

+0

Grazie per quello. Il problema con entrambi i suggerimenti è che funziona solo con Git. –

+0

Esistono equivalenti per la maggior parte delle implementazioni SCM. Ad esempio, per subversion puoi usare 'scm.setWorkspaceUpdater (new UpdateWithCleanUpdater())' – amuniz

+0

Dove posso trovare la documentazione su queste cose? (Sto usando Hg.) –

-1

Attualmente Jenkins contiene una pagina per generare sintassi groovy della pipeline. Selezionando il checkout dovresti essere in grado di aggiungere tutte le opzioni aggiuntive a cui sei abituato.

ho generato il seguente, che dovrebbe fare quello che vuoi:

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

Questa risposta funziona solo su un normale lavoro Pipeline ma non funziona sul lavoro Pipeline Multibranch. –

0

mi imbatto nello stesso problema e qui è la mia soluzione. Ho creato un nuovo oggetto scm per il checkout e esteso le estensioni con CleanBeforeCheckout. Ma ho mantenuto le altre configurazioni come branch e userRemoteConfigs.

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

E 'ancora perfetto perché si deve Reate un nuovo oggetto :(