2014-02-25 98 views
3

我們在工作中有一系列shell腳本,我試圖通過使用Jenkins來改進(爲了有更多的控制權並允許不熟悉shell腳本的開發人員理解和更改過程(如果需要))。如何使用Jenkins創建作業層次結構?

我沒有遇到任何問題,涉及基本檢查與SVN的項目,使用Maven構建它,並將戰爭部署到我們的容器。

但現在我正在嘗試創建一個Jenkins作業來爲我們的客戶打包Linux,Linux x86_64和Windows安裝程序。該腳本執行以下操作:

  1. 檢出項目(SVN);
  2. 用測試配置文件(Maven)構建主項目;
  3. 將戰爭複製到Samba Share(smbclient);
  4. 用生產配置文件重建項目;
  5. 在Linux,Linux64和Windows文件夾內更新版本化(SVN)文件夾;
  6. 複製linux文件夾中的戰爭;
  7. 使用Linux文件夾創建一個tarball;
  8. 在Linux64文件夾中複製戰爭;
  9. 使用Linux64文件夾創建一個tarball;
  10. 將戰爭複製到Windows文件夾中;
  11. 創建一個Windows可執行文件,並在Wine上運行InnoSetup;
  12. 將軟件包複製到Samba共享。

這個腳本是太複雜了,有在Linux,LINUX64和Windows文件夾之間有很多冗餘。我想象中的改進方法,在這裏我會使用以下文件夾結構:

libs 
|-- unversioned-folder 
|-- linux 
| `-- specific linux files 
|-- linux64 
| `-- specific linux x86_64 files 
`-- windows 
    `-- specific windows files 

workspace 
|-- main-project 
`-- versioned-folder 
    |-- versioned-subfolder1 
    |-- versioned-subfolder2 
    |-- unversioned-folder (copied from libs) 
    | `-- main-project.war (built with Maven from the main-project) 
    `-- Linux or Linux64 or Windows specific folder (overwritten after each packaging) 

這樣,版本控制的目錄不重複,我可以打包的Linux,LINUX64和Windows安裝程序沒有裁員,只是覆蓋每個特定的文件。

我一直在試驗Jenkins,並且在腳本的第一部分使用Publish Over CIFS插件。但是如果我繼續使用同樣的工作,我意識到它會變得太複雜,而且大部分步驟都會在後期構建中發生。

理想的方法是將作業分解爲更小的作業,就像在shell腳本中調用函數一樣。現在我正在研究Multijob plugin

我想知道是否有可能在詹金斯這種層次結構,共享父作業的工作區:

安裝工作

  1. 結賬主體工程
  2. 子作業:創建測試項目
    1. 搭建測試簡介的主項目
    2. 複製w AR文件到Windows共享
  3. 子作業:創建生產項目
    1. 重建的主要項目,生產概況
  4. 子作業:創建包
    1. 結帳版本化的文件夾;
    2. 將未版本控制的文件夾複製到版本控制的文件夾中;
    3. 將主項目戰爭文件複製到未版本控制的文件夾中;
    4. 子作業:包Linux安裝程序
      1. 副本無版本的Linux特有的文件到版本控制目錄;
      2. 創建一個tarball(包裝)。
    5. 子作業:包linux x86_64的安裝
      1. 副本無版本的LINUX64特定文件;
      2. 創建一個tarball(包裝)。
    6. 子作業:包的Windows Installer
      1. 副本無版本的Windows特定文件;
      2. 使用InnoSetup創建一個可執行的安裝程序(可能是帶有wine的shell腳本)。
    7. 發送軟件包到Windows共享。

萬一父作業的工作空間無法子作業之間共享,我怎麼能達到同樣的效果與詹金斯的shell腳本?

+0

,我將使用詹金斯/ shell腳本的混合: 1作業檢出,構建並複製主項目的戰爭到samba共享中,第二項工作檢查主項目和版本化文件夾,構建生產的主項目,然後調用shell腳本來複制未版本化的文件夾並打包文件。 – Tarek

回答