2014-09-24 57 views
3

每個jenkins管道的功能都差不多 - 至少在一個擁有多個項目的小團隊中。Jenkins中的模板工作流程

生成(來自同一源代碼回購) - >運行測試 - >發佈的文物(以同一工件回購)

我們正在創造許多新的項目,他們都有着非常相似的生命週期。是否可以創建一個模板管道,從中可以創建具體的管道並對作業進行必要的更改?

回答

4

有幾種方法可以讓我和我的團隊使用這項工作。

第1部分)是確定哪些編排插件最適合詹金斯。 插件和方法,對我行之有效分別爲:

a)使用http://ci.openstack.org/jenkins-job-builder/ 它抽象的作業定義和使用更高級別的庫流量。它允許您在YAML中定義作業非常簡單,並支持大多數常見用例(作業,模板,流程)。 然後這些yaml文件可以通過jenkins-jobs-builder python cli工具通過編排工具(如ansible,puppet,chef)來使用。 您可以使用YAML錨來代替所共有的多個作業區塊,或曾經從一個模板引擎模板它們(ERB,Jinja2的)

b)利用工作流插件,https://github.com/jenkinsci/workflow-plugin 工作流程插件允許你在groovy中有一個單一的工作流程,而不是一組鏈接在一起的工作。

「例如,要檢查,並建立若干個並聯的倉庫,每個自身奴:

parallel repos.collectEntries {repo -> [/* thread label */repo, { 
    node { 
     dir('sources') { // switch to subdir 
      git url: "https://github.com/user/${repo}" 
      sh 'make all -Dtarget=../build' 
     } 
    } 
}]} 

如果你建立從一個模板引擎,這些工作流定義(ERB,Jinja2的),並將它們與配置管理工具(再次,ansible,廚師,木偶)進行整合。 做出影響一個或所有工作的較小和較大的更改變得容易很多。 例如,您可以模板化一些jenkins框,將工件編譯,發佈和部署到開發環境中,而其他工具只是將工件部署到QA環境中。 這可以通過在jinja2/erb中使用if/then語句和宏來使用相同的模板來實現。

EX(抽象):

if ($environment == dev=) then compile, publish, deploy($environment) 
elif ($environment== qa) then deploy($environment) 

分2)是確保所有的詹金斯配置的所有作業和流量保持在源代碼控制,並確保一個源作業定義的變化控制權將自動傳播給詹金斯服務器(同樣是一個真人,傀儡,廚師)。 甚至有一個詹金斯工作,監測自己的工作定義回購和自動更新本身

當你實現#1和#2你應該在一個位置,你可以有一定的信心讓你的所有團隊成員做改變他們的工作/項目,告訴你誰改變了什麼以及什麼時候改變了,並且當出現問題時能夠很容易地從變更控制中回滾改變。

它幾乎可以讓jenkins從自己定義的一系列模板化作業中部署代碼。

+0

考慮在這裏添加'jenkins-workflow'標籤是否合適,儘管這只是在答案中提到的,而不是問題。 – 2015-04-02 12:03:55

+0

認爲將示例添加到我的答案可能很有用。這是我如何從配置管理使用合理的https://github.com/Azulinho/ansible-jenkins-showcase管理完全配置的jenkins – azul 2015-04-03 14:38:39

+0

什麼是'/ *線程標籤* /'? – Will 2016-09-04 09:09:55

0

我們一直遵循的另一種方法是通過Ansible模板管理作業。我們開始的方式之前jenkins_job模塊面世,並使用URL模塊交談詹金斯,但總的做法是一樣的:不同的工作創造

  1. J2模板
  2. 循環越過項目定義和更新在詹金斯
  3. 默認共同定義的工作,並享有使用,且需要很小的描述:

    default_project: 
        jobs: 
        Build: 
         template: build.xml.j2 
        Release: ... 
    
    projects: 
        DefaultProject1: 
        properties: 
         repository: git://../.. 
        CustomProject2: 
        properties: 
         a: b 
         c: d 
        jobs: 
         Custom-Build: 
         template: custom.j2