如何将jenkins作业移动到子文件夹?

时间:2016-09-09 07:54:01

标签: jenkins

我在文件夹foo中有10个jenkins工作。我在文件夹baar中创建了一个新的子文件夹foo。如何将10个作业从文件夹foo移动到子文件夹baar

4 个答案:

答案 0 :(得分:21)

首先,您需要安装cloudbees folder plugin,然后您会看到作业中的移动选项

enter image description here

点击它,然后选项(下拉)将出现在您要移动的位置enter image description here

选择并移动

答案 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”