我們在工作中有一系列shell腳本,我試圖通過使用Jenkins來改進(爲了有更多的控制權並允許不熟悉shell腳本的開發人員理解和更改過程(如果需要))。如何使用Jenkins創建作業層次結構?
我沒有遇到任何問題,涉及基本檢查與SVN的項目,使用Maven構建它,並將戰爭部署到我們的容器。
但現在我正在嘗試創建一個Jenkins作業來爲我們的客戶打包Linux,Linux x86_64和Windows安裝程序。該腳本執行以下操作:
- 檢出項目(SVN);
- 用測試配置文件(Maven)構建主項目;
- 將戰爭複製到Samba Share(smbclient);
- 用生產配置文件重建項目;
- 在Linux,Linux64和Windows文件夾內更新版本化(SVN)文件夾;
- 複製linux文件夾中的戰爭;
- 使用Linux文件夾創建一個tarball;
- 在Linux64文件夾中複製戰爭;
- 使用Linux64文件夾創建一個tarball;
- 將戰爭複製到Windows文件夾中;
- 創建一個Windows可執行文件,並在Wine上運行InnoSetup;
- 將軟件包複製到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。
我想知道是否有可能在詹金斯這種層次結構,共享父作業的工作區:
安裝工作
- 結賬主體工程
- 子作業:創建測試項目
- 搭建測試簡介的主項目
- 複製w AR文件到Windows共享
- 子作業:創建生產項目
- 重建的主要項目,生產概況
- 子作業:創建包
- 結帳版本化的文件夾;
- 將未版本控制的文件夾複製到版本控制的文件夾中;
- 將主項目戰爭文件複製到未版本控制的文件夾中;
- 子作業:包Linux安裝程序
- 副本無版本的Linux特有的文件到版本控制目錄;
- 創建一個tarball(包裝)。
- 子作業:包linux x86_64的安裝
- 副本無版本的LINUX64特定文件;
- 創建一個tarball(包裝)。
- 子作業:包的Windows Installer
- 副本無版本的Windows特定文件;
- 使用InnoSetup創建一個可執行的安裝程序(可能是帶有wine的shell腳本)。
- 發送軟件包到Windows共享。
萬一父作業的工作空間無法子作業之間共享,我怎麼能達到同樣的效果與詹金斯的shell腳本?
,我將使用詹金斯/ shell腳本的混合: 1作業檢出,構建並複製主項目的戰爭到samba共享中,第二項工作檢查主項目和版本化文件夾,構建生產的主項目,然後調用shell腳本來複制未版本化的文件夾並打包文件。 – Tarek