我在文件夹foo
中有10个jenkins工作。我在文件夹baar
中创建了一个新的子文件夹foo
。如何将10个作业从文件夹foo
移动到子文件夹baar
?
答案 0 :(得分:21)
答案 1 :(得分:7)
正如@Pratik Anand所提到的,您首先需要安装CloudBees Folders Plugin。
但是,如果您想同时移动多个项目,使用script console执行此操作要快得多。这个时髦的脚本可以解决这个问题:
def FOLDER_NAME = '<An existing destination folder>'
def JOB_REGEX = '<A regex to find your jobs>'
import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*
jenkins = Jenkins.instance
def folder = jenkins.getItemByFullName(FOLDER_NAME)
if (folder == null) {
println "ERROR: Folder '$FOLDER_NAME' not found"
return
}
// Find jobs in main folder
def found = jenkins.items.grep { it.name =~ "${JOB_REGEX}" }
println "Searching main folder : $found"
// Find jobs in other subfolders
jenkins.items.grep { it instanceof com.cloudbees.hudson.plugins.folder.Folder }.each { subfolder ->
if(!subfolder.getName().equals(FOLDER_NAME))
{
println "Searching folder '$subfolder.name'"
subfolder.getItems().grep { it.name =~ "${JOB_REGEX}" }.each { job ->
println "Found $job.name"
found.add(job);
}
}
}
// Move them
found.each { job ->
println "Moving '$job.name' to '$folder.name'"
Items.move(job, folder)
}
我在this thread中使用了Daniel Serodio的回复,并将其修改为搜索子文件夹。请注意,这不是完全递归的。
答案 2 :(得分:1)
如果您的作业是用DSL编写的,则可以创建一个文件夹:
folder("foo") {
displayName('foo')
description('A folder with all my foo')
}
folder("baar") {
displayName('baar')
description('A folder with all my baar')
}
然后,在您的作业的dsl中,您只需在作业创建中引用该文件夹:
job('baar/myJob') {
description('A job which now lives in the baar folder.')
...
}
DSL插件处理完作业后,您将在该文件夹中看到它。但是,该文件夹必须已经存在,所以我通常将我的文件夹命名为类似all_folders.groovy
的文件夹,以便首先处理它。如果您未在job
声明中指定文件夹,则它将位于主Jenkins视图中。
答案 3 :(得分:0)
您是否尝试使用插件文件夹?
https://wiki.jenkins-ci.org/display/JENKINS/CloudBees+Folders+Plugin
然后,您可以使用以下功能移动作业:“move”