5

Questa domanda è praticamente la stessa di this one eccetto che sto usando subversion, e nessun aggiornamento plugin ha fatto il trucco per me.Duplicate changelogs in jenkins pipeline script con SVN

Sto caricando il mio script Jenkinsfile con un'impostazione pipeline multicanale e il registro modifiche viene duplicato a ogni nuovo checkout scm.

Dal momento che nel mio costruire sto usando più aree di lavoro, assegnati mediante node all'interno parallel blocchi, sto chiamando casse fresche per ciascuno di essi, e la duplicazione changelog sta diventando un po 'fastidioso.

risposta

5

Di fronte allo stesso problema.

Sto facendo quanto segue, fino a quando non viene rilasciata una correzione per il plug-in SVN.

currentBuild.getChangeSets().clear() 
checkout scm 

Attenzione: potrebbe essere necessario approvare le chiamate di script tramite la pagina "Approvazione script in corso".

Questo cancellerà il log delle modifiche dal lavoro di Jenkins. Il registro delle modifiche verrà riempito nuovamente dalla chiamata "checkout scm". UPDATE: Controlla la mia modifica qui sotto. Questa "soluzione" non funziona, perché aggiunge indietro le revisioni rimosso dopo un riavvio ... io non capisco perché, ma ...

EDIT:

OK ora ho trovato un nuovo modo:

for(i = 0; i < scm.getLocations().length; i++) { 
     def location = scm.getLocations()[i] 
     def svn_url = location.remote 
     checkout changelog: false, poll: false, scm: [$class: 'SubversionSCM', additionalCredentials: [], excludedCommitMessages: '', excludedRegions: '', excludedRevprop: '', excludedUsers: '', filterChangelog: false, ignoreDirPropChanges: false, includedRegions: '', locations: [[credentialsId: '252ad9ab-2f39-46f5-a77a-6196d1679dee', depthOption: 'infinity', ignoreExternalsOption: true, local: '.', remote: svn_url]], workspaceUpdater: [$class: 'UpdateWithRevertUpdater']] 
    } 

È necessario utilizzare la pagina "Sintassi della pipeline" per ottenere le credenziali corrette. Ho provato ad utilizzare solo

checkout changelog: false, scm 

ma che non ha funzionato. Quindi devi usare la versione lunga mostrata sopra.

+0

Grazie per aver proposto una soluzione, ci provo non appena torno al lavoro dalle vacanze. –

+0

Trovato una cosa brutta ... Se Jenkins viene riavviato, sembra ricostruire i changeset e aggiunge il precedente eliminato alla build :( Appena scoperto dopo un aggiornamento e riavvio ... –

+0

ok ho trovato un nuovo modo di lavorare., Vedere sopra –

3

La risposta di Ben Herfurth è buona, mi limiterò a postare il mio adattamento finale perché ho cercato di avvolgerlo un po 'in una singola funzione di lavoro.

Questa funzione funziona per me, come ho solo una repository SVN alla cassa, e tutto il resto (ad esempio, le password) sono stati configurati già:

def checkout(){ 
    def svnLocation = scm.locations[0] 
    checkout(changelog: false, scm: [$class: 'SubversionSCM', locations: [svnLocation], workspaceUpdater: [$class: 'UpdateWithCleanUpdater']]) 
} 

ho appena cadere una chiamata a questo ovunque ho bisogno di un fresco copia di lavoro.

node('linux') {   
    checkout() 
    // ... run ITs on linux ... 
} 

node('windows') { 
    checkout() // doesn't duplicate changelog anymore 
    // ... run ITs on windows .... 
} 

Spero che questo aiuti gli altri.

3

Anziché ridefinire la classe SCM, si può ancora riferimento all'oggetto originale "SCM" e disattivare il changelog modo:

checkout(changelog: false, scm: scm) 

Questo manterrà il behviour previsto di "cassa scm" mentre disattiva la generazione di changelog.

+0

Funziona ora, grazie :) Non ha funzionato allora, quando ho scritto la risposta. –