簡體   English   中英

詹金斯工作視圖與不同的工作名稱

[英]Jenkins Job Views with different Job names

我在詹金斯有一個要求,其中,

  1. 例如,我們在具有特定配置的ABC視圖中有10個作業。
  2. 現在,我需要在Jenkins XYZ中創建一個新視圖,並使用不同的名稱克隆ABC中的所有作業並更改配置,例如SCM URL。

我遇到了一個可以做到這一點的時髦腳本,但我並不太了解常規

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

我們為每個版本創建一個新的分支(新的URL)。 因此,視圖ABC下的作業需要復制到具有不同名稱和URL更新的XYZ中。 我不想浪費時間用不同的名稱單獨創建每個作業,然后將它們添加到視圖XYZ

任何幫助將受到高度贊賞。

您可以使用文件夾插件 ,然后您無需更改作業名稱或管理視圖。

要將作業從一個文件夾復制到另一個文件夾,您可以像這樣使用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 helpssh -l USERNAME MYJenkins:port help create-job

獲取有關語法和可用命令的一些提示。

您可以使用jenkins job dsl ,它還包含一個用於創建視圖的接口

您可以使用此方法迭代視圖中的作業

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM