Last active
March 8, 2018 17:08
-
-
Save gshively11/13dcdd61b78b7910923e to your computer and use it in GitHub Desktop.
How to configure Jenkins SCM sync plugin programatically for git repo using Groovy Script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import jenkins.model.* | |
import hudson.security.* | |
import org.jenkinsci.plugins.* | |
import hudson.plugins.scm_sync_configuration.xstream.migration.DefaultSSCPOJO | |
import hudson.plugins.scm_sync_configuration.scms.* | |
import hudson.plugins.scm_sync_configuration.ScmSyncConfigurationPlugin | |
import net.sf.json.JSONObject | |
import org.kohsuke.stapler.StaplerRequest | |
import groovy.mock.interceptor.MockFor | |
def mock = [ | |
getParameter: { | |
key -> switch(key) { | |
case 'gitRepositoryUrl': | |
return '#{node['crm-jenkins']['github']['sync_repo']}' | |
case 'commitMessagePattern': | |
return 'Sync: [message]' | |
case 'scm': | |
return 'hudson.plugins.scm_sync_configuration.scms.ScmSyncGitSCM' | |
default: | |
return null | |
} | |
}, | |
getParameterValues: { | |
return null | |
} | |
] as StaplerRequest | |
def data = new DefaultSSCPOJO() | |
data.setScmRepositoryUrl('#{node['crm-jenkins']['github']['sync_repo']}') | |
data.setScm(SCM.valueOf(ScmSyncGitSCM.class)) | |
data.setNoUserCommitMessage(false) | |
data.setDisplayStatus(true) | |
data.setCommitMessagePattern('Sync: [message]') | |
def jsonObj = new JSONObject() | |
jsonObj.put('noUserCommitMessage', 'false') | |
jsonObj.put('displayStatus', 'true') | |
def instance = Jenkins.getInstance() | |
def scmSyncPlugin = instance.getPlugin('scm-sync-configuration') | |
if (#{node['crm-jenkins']['sync_repo_is_empty']}) { | |
scmSyncPlugin.configure(mock, jsonObj) | |
} | |
else { | |
scmSyncPlugin.loadData(data) | |
scmSyncPlugin.business.reloadAllFilesFromScm() | |
scmSyncPlugin.business.synchronizeAllConfigs(ScmSyncConfigurationPlugin.AVAILABLE_STRATEGIES) | |
instance.save() | |
} |
Hello,
Could you please also add config for "manualSynchronizationIncludes" ?
Thanks,
Arun S
@arunssasidhar This is working for me:
import net.sf.json.JSONObject
import org.kohsuke.stapler.StaplerRequest
import hudson.plugins.scm_sync_configuration.ScmSyncConfigurationPlugin
def params = [
noUserCommitMessage: false,
displayStatus: true,
scm: 'hudson.plugins.scm_sync_configuration.scms.ScmSyncGitSCM',
gitRepositoryUrl: '[email protected]:myOrg/ci.git',
manualSynchronizationIncludes: ['poopy', 'stoopy'],
commitMessagePattern: '[message]'
]
def JSONObject formData = [ params ] as JSONObject
def req = [
getParameter: { name ->
params[name]
},
getParameterValues: { name ->
if (params[name]) {
return params[name] as String[]
}
else
{
return null
}
}
] as org.kohsuke.stapler.StaplerRequest
scm = new ScmSyncConfigurationPlugin().getInstance()
scm.configure(req, formData)
scm.reloadAllFilesFromScm()
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You'll need a step before this runs that clones your sync_repo to /var/lib/jenkins/scm-sync-configuration/checkoutConfiguration if your sync_repo_is_empty flag is false (and create the directories if they don't exist)