新聞中心
在大規(guī)模的Jenkins實(shí)踐中創(chuàng)建項(xiàng)目也是一個(gè)問題,如何通過模板自動(dòng)化的創(chuàng)建Jenkins項(xiàng)目呢? 可以通過安裝Job Dsl插件后,通過 Dsl直接創(chuàng)建項(xiàng)目。也可以通過工具將dsl轉(zhuǎn)換為xml,然后再通過Jenkins API創(chuàng)建項(xiàng)目。相對(duì)比較第一種方式更加直接一些,由于時(shí)間問題今天暫時(shí)分享第二種創(chuàng)建項(xiàng)目的方式。

創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元湛江做網(wǎng)站,已為上家服務(wù),為湛江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
1.根據(jù)Job DSL API生成模板
我們需要先安裝好Job Dsl 插件,然后執(zhí)行DSL創(chuàng)建項(xiàng)目。地址:https://jenkinsci.github.io/job-dsl-plugin/
例如: 使用官網(wǎng)的example。這里定義了一個(gè)流水線項(xiàng)目,配置了項(xiàng)目的信息包括(項(xiàng)目描述、項(xiàng)目參數(shù)、Jenkinsfile地址)
- pipelineJob("test-schdule-service") {
- description("this is my first job")
- keepDependencies(false)
- parameters {
- choiceParam("test", [1, 2, 3], "")
- }
- definition {
- cpsScm {
- scm {
- git {
- remote {
- github("https://gitlab.com/xxx/xxx.git", "https")
- credentials("24982560-17fc-4589-819b-bc5bea89da77")
- }
- branch("*/master")
- }
- }
- scriptPath("Jenkinsfile")
- }
- }
- disabled(false)
- }
2.通過Playground轉(zhuǎn)換DSL -> XML
url: http://job-dsl.herokuapp.com/
3.通過Jenkins Core Api創(chuàng)建項(xiàng)目
- import javax.xml.transform.stream.StreamSource
- import jenkins.model.Jenkins
- //創(chuàng)建項(xiàng)目
- void createOrUpdateJob(String name, String xml) {
- def j = Jenkins.instance
- String fullName = name
- if(name.contains('/')) {
- j = j.getItemByFullName(name.tokenize('/')[0..-2])
- name = name.tokenize('/')[-1]
- }
- Jenkins.checkGoodName(name)
- if(j.getItem(name) == null) {
- println "Created job \"${fullName}\"."
- j.createProjectFromXML(name, new ByteArrayInputStream(xml.getBytes()))
- j.save()
- }
- else if(j.getItem(name).configFile.asString().trim() != xml.trim()) {
- j.getItem(name).updateByXml(new StreamSource(new ByteArrayInputStream(xml.getBytes())))
- j.getItem(name).save()
- println "Job \"${fullName}\" already exists. Updated using XML."
- }
- else {
- println "Nothing changed. Job \"${fullName}\" already exists."
- }
- }
- try {
- //just by trying to access properties should throw an exception
- itemName == null
- xmlData == null
- isPropertiesSet = true
- } catch(MissingPropertyException e) {
- println 'ERROR Can\'t create job.'
- println 'ERROR Missing properties: itemName, xmlData'
- return
- }
- String xmlData = """
this is my first job false 1 2 3 test https://github.com/https://gitlab.com/xxx/xxx.git/


咨詢
建站咨詢