0

Does anyone have an updated version of ceilfors answer that works for both AbstractProject and WorkflowJob?

  • Have you tried the code? Is something not working? – ycr Jul 18 '22 at 18:44
  • It works for jobs of type AbstractProject but not of type WorkflowJob. Error: groovy.lang.MissingPropertyException: No such property: scm for class: org.jenkinsci.plugins.workflow.job.WorkflowJob – littleccguy Jul 20 '22 at 11:57

1 Answers1

0

This is the solution I came up with. It was tested on Jenkins 2.355 The test was run from the script console. For testing purposes, I limited the test to one Freestyle (AbstractProject) and one Pipeline (WorkflowJob) job each. You would need to modify the code below.

I hope others find this useful

import org.jenkinsci.plugins.workflow.job.WorkflowJob;
import hudson.plugins.git.*
import jenkins.*
import jenkins.model.*

def modifyGitUrl(url) {
    def updatedUrl = url.toString().replace("git@gitlab", "git@github")
//  println "updatedUrl = ${updatedUrl}"
    return updatedUrl
}

Jenkins.instance.getAllItems(Job.class).each {

    project = it.getFullName()
    if(project.toString().equals("PL_Quick_Testing") || project.toString().equals("A_Freestyle_Job")) {
        try {
            if (it instanceof AbstractProject){
                def oldScm = it.scm
                
                def newUserRemoteConfigs = oldScm.userRemoteConfigs.collect {
                    new UserRemoteConfig(modifyGitUrl(it.url), it.name, it.refspec, it.credentialsId)
                }
                
                def newScm = new GitSCM(newUserRemoteConfigs, oldScm.branches, oldScm.doGenerateSubmoduleConfigurations,
                        oldScm.submoduleCfg, oldScm.browser, oldScm.gitTool, oldScm.extensions)
                it.scm = newScm
                it.save()

                println "Done"
                 
            } else if (it instanceof WorkflowJob) {
                def oldScm = it.getTypicalSCM()
                def definition = it.getDefinition()
                String scriptPath = it.getDefinition().getScriptPath()

                def newUserRemoteConfigs = oldScm.userRemoteConfigs.collect {
                    new UserRemoteConfig(modifyGitUrl(oldScm.userRemoteConfigs.url[0]), it.name, it.refspec, it.credentialsId)
                }
                
                def newScm = new GitSCM(newUserRemoteConfigs, oldScm.branches, oldScm.doGenerateSubmoduleConfigurations,
                        oldScm.submoduleCfg, oldScm.browser, oldScm.gitTool, oldScm.extensions)

                def newDefinition = new org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition(newScm, scriptPath)
                it.definition = newDefinition
                it.save()

                println "Done"
                
            } else {
                println("${project} has no SCM")
            }

        } catch (Exception e) {
            // e.printStackTrace()
        }

    }
}