我在 Jenkins 中有超过 100 个作业,自从我们更改了 git 服务器以来,我必须更改每个作业中的 Git URL。 我必须遍历每个作业并更改 Git URL。谁能帮我写一个绝妙的脚本吗?
我能够遍历每个作业,但无法获取 Git URL 或更改它:
import hudson.plugins.emailext.*
import hudson.model.*
import hudson.maven.*
import hudson.maven.reporters.*
import hudson.tasks.*
// For each project
for(item in Hudson.instance.items) {
println("JOB : " + item.name);
}
我在这方面非常需要帮助,请有人帮助我。
下面的脚本将修改所有 Git URL。您需要填写modifyGitUrl 方法。脚本是为 Git 插件版本 2.3.2 编写的。检查 git 插件源代码 将其调整为您需要的版本,例如构造函数参数可能已更改。
import hudson.plugins.git.*
import jenkins.*
import jenkins.model.*
def modifyGitUrl(url) {
// Your script here
return url + "modified"
}
Jenkins.instance.items.each {
if (it.scm instanceof GitSCM) {
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()
}
}
我会关闭服务器并使用脚本(sed/awk perl 或其他)编辑所有 config.xml 文件,然后重新启动 jenkins 来加载新配置。
如果关闭 jenkins 不是一个选项,则可以使用类似的内容编辑并发布每个 config.xml
GET http://myserver/job/config.xml| sed s/oldurl/newurl/g |POST http://myserver/job/config.xml
根据@ceilfors的回答,
it.scm = newScm
不再起作用,可以通过新的CpsScmFlowDefinition
来实现(示例如下)
Boolean orgLightweight = job.definition?.lightweight
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
)
CpsScmFlowDefinition flowDefinition = new CpsScmFlowDefinition( newScm, job.definition.scriptPath )
job.definition = flowDefinition
job.definition.lightweight = orgLightweight
job.save()