2017-10-12 157 views
0

我試圖完全自動創建Jenkins。我使用groovy腳本獲得了大部分設置。我最後的障礙是使用DSL創建工作。我能夠通過創建使用XML的工作:Jenkins:使用DSL自動創建工作

import jenkins.model.* 

def jobName = "jobname" 
String configXml = new File('/jobname.xml').getText('UTF-8') 
def xmlStream = new ByteArrayInputStream(configXml.getBytes()) 
Jenkins.instance.createProjectFromXML(jobName, xmlStream) 

然而,XML文件是很難維持的,不容易理解。所以我想切換到使用DSL語法,但我不能修復一個API來將createProjectFromXML(...)替換爲createPrjectFromDSL之類的東西?

我的問題是如何使用DSL創建一個新的工作?我有這部分工作,謝謝。

但是,我的下一個問題是我在哪裏放這個文件,所以詹金斯將在啓動時創建作業?當我試圖把它複製到/var/jenkins_home/init.groovy.d我得到啓動以下異常:

警告:無法運行腳本文件:/var/jenkins_home/init.groovy.d/ neoconfig-dsl.groovy groovy.lang.MissingMethodException:方法沒有簽名:neoconfig-dsl.job()適用於參數類型:(java.lang.String,neoconfig-dsl $ _run_closure1)values:[neo,neoconfig- DSL $ _run_closure1 @ 7d799f93] 可能的解決方案:運行(),運行(),任(),等待(),grep的(),轉儲()

+0

您可以創建一個項目,該項目將從遠程倉庫獲取DSL作業並構建它們。 – Opal

+0

我認爲是我尋找的東西。你能再詳細一點嗎?我的目標是使用工作DSL自動創建我所有的工作。 – Gerb

回答

1

詹金斯Job DSL插件提供準確,你似乎什麼正在尋找:A(基於Groovy的)DSL來定義作業。

一個簡單的工作定義如下所示:

def repo = 'DSL-Tutorial-1-Test' 
job(repo) { 
    scm { 
     git('git://github.com/quidryan/aws-sdk-test.git') 
    } 
    triggers { 
     scm('H/15 * * * *') 
    } 
    steps { 
     maven('-e clean test') 
    } 
} 

編輯:爲了定義後自動啓動這項工作,添加以下代碼:

// automatically queue the job after the initial creation 
if (!jenkins.model.Jenkins.instance.getItemByFullName(repo)) { 
    queue(repo) 
} 

的設置的完整的例子,創建一個自引導碼頭容器可以在tknerr/jenkins-pipes-infra中找到。我正在使用(大部分)相同的方法here

+0

創建作業定義後,我將如何通過某些腳本執行此作業定義?我的目標是讓容器在啓動時完全配置Jenkins的所有作業定義。 – Gerb

+0

我已經更新了我的答案。非常有效的點:-) – StephenKing

+0

謝謝!這正是我所期待的。 – Gerb