我在詹金斯有一个要求,其中,
我遇到了一个可能会这样做的groovy脚本,但我并不太了解groovy
https://wiki.jenkins-ci.org/display/JENKINS/Clone+all+projects+in+a+View
我们为每个版本创建一个新分支(新URL)。因此,视图ABC下的作业需要复制到具有不同名称和URL更新的XYZ中。我不想浪费时间用不同的名称单独创建每个作业,然后将它们添加到视图XYZ
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
您可以使用Folders Plugin,然后无需更改作业名称或管理视图。
要将作业从一个文件夹复制到另一个文件夹,您可以像这样使用ssh cli界面。
ssh -l USERNAME MYjenkins:port copy-job /OLD/job1 /NEW/job1
ssh -l USERNAME MYjenkins:port copy-job /OLD/job2 /NEW/job2
注意:某些ssh客户端不支持":port"并且需要这样的命令:
ssh -l USERNAME -p PORT MYjenkins copy-job /OLD/job1 /NEW/job1
如果不使用文件夹,您可以自动从现有作业创建新作业和视图,如下所示:
ssh -l USERNAME MYjenkins:port create-view NEW-VIEW
ssh -l USERNAME MYjenkins:port copy-job jobN NEW_jobN
ssh -l USERNAME MYjenkins:port add-job-to-view NEW-VIEW NEW_jobN
有关如何配置用户密钥以及如何确定和配置要使用的正确端口的信息,请参阅Cloudbees CLI。
您甚至可以通过检索作业的config.xml然后使用该XML创建新作业,将作业从一个Jenkins实例复制到另一个Jenkins实例,如下所示:
ssh -l USERNAME MYJenkins:port get-job AJOB > AJOB.xml
ssh -l USERNAME MYOTHERJenkins:port2 create-job AJOB < AJOB.xml
最后一个提示:尝试ssh -l USERNAME MYJenkins:port help
或
ssh -l USERNAME MYJenkins:port help create-job
获取有关语法和可用命令的一些提示。
答案 1 :(得分:1)
您可以使用jenkins job dsl,其中还包含create views
的界面您可以使用此
迭代视图中的作业http://<your jenkins server>:<your jenkins port if its not on 80>/view/<your view>/api/json
然后使用job命令
克隆作业job{
name 'new name'
using 'original name'
//other configuration
}
这是在groovy中编码的,作为单独作业中的构建步骤。您甚至可以使用参数来命名视图和作业,或者将其驱逐出SCM
EDIT 一个很好的问题。我像这样实现了它
查看名为templateView的
名为templateJobA,templateJobB等的作业
def templateJobsURL = new URL("http://jenkins-server:8080/view/templateView/api/json")
def templateJobs = new groovy.json.JsonSlurper().parse(templateJobsURL.newReader())
def newJobs = []
templateJobs.jobs.each {
def templateName = it.name
def newName = templateName.replaceAll('template','new')
job {
name newName
using templateName
}
newJobs.push(newName)
println templateName + ' ' + newName
}
view(type: ListView) {
name('new')
description('All jobs for project A')
jobs {
newJobs.each{
names (it)
println 'view add ' + it
}
}
columns {
status()
weather()
name()
lastSuccess()
lastFailure()
lastDuration()
buildButton()
}
}