从TeamCity迁移到Jenkins,我在jenkins控制台上使用groovy脚本来设置我的所有工作。我设置了一个带有大多数必需设置的作业“template.example”并运行此代码:
void createJobs() {
def jenkins = jenkins.model.Jenkins.getInstance()
def template = jenkins.getItem("template.example")
if (!template) {
println("FATAL - template job not found")
return
}
def projects = [ "projectname" : "svn://hostname/path" ]
projects.each() { key, svn ->
def jobid = "${key}.checkin"
println "\nCreating job: ${jobid}"
try {
def job = jenkins.copy(template,jobid)
job.scm = new hudson.scm.SubversionSCM(svn)
job.save()
println("Created job: ${jobid} ${svn}")
} catch (Exception ex) {
println("Failed to create job: ${jobid}\n "+ex.toString())
}
}
}
我的问题是,我希望SCM Checkout Strategy不是默认的“尽可能使用svn更新”,即。 “通过首先删除未版本控制的文件来模拟干净的结帐...”,这不会从template.example项目中复制。
我尝试使用
阅读SCM策略def strategies = jenkins.scm.SCMCheckoutStrategyDescriptor.all()
strategies.each() { k -> println("strategy: "+k.getDisplayName()
但这只返回一个策略“默认”。 其他策略在哪里,以及如何在我的项目中设置我需要的策略(其中有100多个,因此不能手动执行此操作)。
我还需要以某种方式在每个项目上设置svn用户名和密码。
另一种方法可能是修改复制的示例job.scm上的svnURL而不是替换它,这可能具有保持配置的用户名+密码的优点。但是如何在代码中做到这一点?
谢谢,Ed。
答案 0 :(得分:1)
您希望更改的SCM策略实际上位于hudson.scm.SubversionSCM
对象中hudson.scm.subversion.WorkspaceUpdater
。
代码中的scm
对象应该有setWorkspaceUpdater()
方法,您可以使用该方法设置所需的SCM策略。
SCM策略是WorkspaceUpdater:
http://grepcode.com/search/usages?id=repo1.maven.org$maven2@org.jvnet.hudson.plugins$subversion@2.0.0@hudson$scm$subversion@WorkspaceUpdater&start=0&type=type&k=d
在尝试复制新代码版本的构建时,我自己也遇到了这个问题。通过大量的metaClass信息来找到设置此行为的正确方法。