This script changes the Version-Number in the SVN-path of the SVN-configuration for a specific SVN-repository and job.
This is useful, when a project often changes the SVN-path because of a new branch for every release.
import hudson.scm.*
//import hudson.model.*
/** Old Version for the SVN-Path */
oldVersion = "1.28"
/** New Version for the SVN-Path */
newVersion = "1.29"
/** Path to the SVN-Repo containing with the following */
svnpath = "repo/testjob"
/** Jobs containing with */
jobs = "testjob"
/** Should we override existing values? */
overrideExistingValues = false
/** Display Konfiguration */
println "### Overwrite SVN-Version ###"
println "oldVersion: " + oldVersion
println "newVersion: " + newVersion
println "Jobs with: " + jobs
println "Repo_with_Path: " + svnpath
// ----- Do the work. -----
// Access to the Hudson Singleton
hudsonInstance = hudson.model.Hudson.instance
// Retrieve all Jobs which starts with -jobs-
allItems = hudsonInstance.items
chosenJobs = allItems.findAll{job -> job.name.contains(jobs)}
// Table header
col1 = "Job".center(35)
col2 = "OldPath".center(120)
col3 = "NewPath".center(120)
header = "$col1 | $col2 | $col3"
line = header.replaceAll("[Change Version-Number in SVN-path^|]", "-").replaceAll("\\|", "+")
println line
println header
println line
// Do work and create the result table
chosenJobs.each { job ->
if(!(job instanceof hudson.model.ExternalJob)) {
// No SCM-Configuration possible for External Jobs!
if (job.scm instanceof SubversionSCM) {
// Job has a SubversionSCM-Konfiguration
def oldSvnPath = [][]
def newSvnPath = [][]
job.scm.locations.each{
//For every Subversion-Location
if (it.remote.contains(svnpath)) {
//SVN-Path contains the given Path
oldRemote = it.remote.padRight(119)
jobname = job.name.padRight(35)
newRemote = it.remote
if (it.remote.contains(oldVersion)) {
//SVN-Path contains the old Version, which should be replaced
newRemote = it.remote.replaceAll(/$oldVersion/,"$newVersion") //Replace
//Build new SVN-Location (it is not possible to change a value in the existing configuration)
newSvnPath.add(new hudson.scm.SubversionSCM.ModuleLocation(newRemote,it.local))
//For Visualisation of the changed Value
newRemote = newRemote.padRight(120,"<")
// Output Result for this Subversion-Location
println "$jobname | $oldRemote ]> $newRemote"
} else {
//Visualisation of value which is not changed
newRemote = newRemote.padRight(120)
// Output Result for this Subversion-Location
println "$jobname | $oldRemote | $newRemote"
}
}
}
// Every Location was checked. Building new SVN-Configuration with the new SVN-Locations
newscm = new hudson.scm.SubversionSCM(newSvnPath, job.scm.workspaceUpdater, job.scm.browser,
job.scm.excludedRegions, job.scm.excludedUsers, job.scm.excludedRevprop, job.scm.excludedCommitMessages, job.scm.includedRegions)
if (overrideExistingValues){
// Only write values, when overrideExistingValues is true
job.scm = newscm;
}
println line
//Job is done
}
}
}
println line
//done