1

我在詹金斯有一个要求,

  1. 例如,我们在视图 ABC 中有 10 个具有特定配置的作业。
  2. 现在,我需要在 Jenkins XYZ 中创建一个新视图,并以不同的名称克隆 ABC 中的所有作业并更改配置,例如 SCM URL。

我遇到了一个可能会执行此操作的 groovy 脚本,但我不太了解 groovy

https://wiki.jenkins-ci.org/display/JENKINS/Clone+all+projects+in+a+查看

我们为每个版本创建一个新的分支(新的 URL)。因此需要将视图 ABC 下的作业复制到 XYZ 中,并更新不同的名称和 URL。我不想浪费时间分别创建具有不同名称的每个作业,然后将它们添加到视图 XYZ

任何帮助将不胜感激。

4

2 回答 2

2

您可以使用文件夹插件,然后无需更改作业名称或管理视图。

要将作业从一个文件夹复制到另一个文件夹,您可以像这样使用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 将作业从一个 Jenkins 实例复制到另一个实例,然后使用该 XML 创建一个新作业,如下所示:

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 helpssh -l USERNAME MYJenkins:port help create-job

获取有关语法和可用命令的一些提示。

于 2017-06-03T00:03:45.993 回答
1

您可以为此使用jenkins 作业 dsl,它还包含一个创建视图的界面

您可以使用此迭代视图中的作业

http://<your jenkins server>:<your jenkins port if its not on 80>/view/<your view>/api/json

然后使用作业命令克隆作业

job{
  name 'new name'
  using 'original name'

  //other configuration 
}

这都是在 groovy 中编码的,作为单独作业中的构建步骤。您甚至可以使用参数来命名视图和作业或将其从 SCM 中驱动出来


编辑一个很好的问题。我是这样实现的

名为 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()
    }
}
于 2014-06-17T00:07:17.627 回答