Groovy Script for Jenkins Script Console to Rename the Subversion Host Name
The host name of a Subversion instance is renamed and now many Jenkins jobs have to be adjusted. One possibility is to change every job by hand. But this approach is very time-consuming and error-prone. A better possibility is to have a script based approach, that rename the Subversion host name of all jobs in one go. Jenkins has a feature, that helps us thereby. Jenkins has a script console to run Groovy script on Jenkins server [1]. Below you can see a Groovy script that renames the Subversion host name in all jobs.
1def oldHostName = "old.hostname.com"
2def newHostName = "new.hostname.com"
3
4Hudson.instance.items.each { item ->
5
6 if(item.scm instanceof hudson.scm.SubversionSCM) {
7 println("JOB : "+item.name)
8
9 def newLocations = new ArrayList<hudson.scm.SubversionSCM.ModuleLocation>()
10
11 item.scm.locations.each {location ->
12
13 println("SCM Location Remote : " + location.remote)
14 def newRemoteUrl = location.remote.replaceFirst(oldHostName, newHostName)
15
16 newLocations.add(new hudson.scm.SubversionSCM.ModuleLocation(newRemoteUrl, location.local, location.depthOption,location.ignoreExternalsOption))
17 }
18
19 def newScm = new hudson.scm.SubversionSCM(newLocations, item.scm.workspaceUpdater,
20 item.scm.browser, item.scm.excludedRegions, item.scm.excludedUsers, item.scm.excludedRevprop, item.scm.excludedCommitMessages,
21 item.scm.includedRegions, item.scm.ignoreDirPropChanges, item.scm.filterChangelog)
22
23 newScm.locations.each { location ->
24 println("New SCM Location Remote : " + location.remote)
25 }
26
27 item.scm = newScm
28 item.save()
29 println("\n=======\n")
30 }
31}
This script is tested with Jenkins version 1.534 and Jenkins Subversion Plugin version 1.53.