【问题标题】:Jenkins Job Views with different Job names具有不同作业名称的 Jenkins 作业视图
【发布时间】:2014-08-06 13:05:40
【问题描述】:

我在 Jenkins 中有一个要求,

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 有什么问题?那个脚本没有做什么?
  • 我对groovy不熟悉。所以我无法理解定义的变量,例如 def str_view = "MyProduct_Release_1.0" def str_search = "Rel_1.0" def str_replace = "Rel_1.1"....
  • 我想要的是创建一个新视图 (XYZ),将作业从现有视图 ABC 复制到具有不同作业名称的 XYZ。而已。我相信这个 groovy 脚本应该这样做,但不确定脚本中的字段。
  • 刚刚发现脚本正在从同一视图本身的现有作业创建新作业。要求是创建一个新视图,然后将作业复制到具有不同作业名称的该视图

标签: groovy jenkins jenkins-cli groovy-console jenkins-scriptler


【解决方案1】:

您可以使用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 实例复制到另一个实例,如下所示:

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

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

【讨论】:

  • 注意:从一个 Jenkins 复制到另一个时,还有许多其他注意事项,例如目标 jenkins 是否具有相同的插件和相关配置:凭据、环境变量等项目。
【解决方案2】:

您可以为此使用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 中驱动出来


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

名为 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()
    }
}

【讨论】:

  • 我的视图中有 120 个作业。当我们有一个新分支时,我希望能够在具有不同作业名称的不同视图下复制这些作业配置。有没有办法自动化这个。一种方法是转到 jenkins 主目录,复制作业,然后更改 config.xml
  • 我想知道这里必须定义什么。我很困惑: templateJobs.jobs.each { def templateName = it.name def newName = templateName.replaceAll('template','new') job { name newName using templateName @KeepCalmAndCarryOn
  • 嘿,我试图使用您提供的选项,但没有通过。你能帮我吗?我对定义的参数感到困惑。请让我知道在哪里定义以下内容:
  • 现有视图-XYZ下的XYZ作业--sample-1, foobar-1, fifa-1
  • 需要新视图 - ABC 要求从 XYZ 创建作业,如 sample-2、foobar-2 和 fifa-3 基本上,需要用 2 替换 1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 2020-05-27
相关资源
最近更新 更多