Skip to content

Instantly share code, notes, and snippets.

@gshively11
Last active March 8, 2018 17:08
Show Gist options
  • Save gshively11/13dcdd61b78b7910923e to your computer and use it in GitHub Desktop.
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
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()
}
@gshively11
Copy link
Author

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)

@arunssasidhar
Copy link

Hello,

Could you please also add config for "manualSynchronizationIncludes" ?

Thanks,
Arun S

@guymatz
Copy link

guymatz commented Mar 8, 2018

@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: 'git@bitbucket.org: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