管理真正構(gòu)建是非常復(fù)雜的,但至少我們學(xué)會(huì)了如何安裝和啟動(dòng)Jenkins。中培專家龔老師指出,如果在安裝fortune程序時(shí)遇上了麻煩,你還會(huì)對(duì)持續(xù)集成服務(wù)器的陰暗面有一個(gè)初步的了解:管理構(gòu)建依賴。
有些構(gòu)建系統(tǒng),例如Maven工具,它的POM文件描述了所需的構(gòu)建依賴,這一點(diǎn)很不錯(cuò)。如果這些依賴在構(gòu)建服務(wù)器里還不存在,Maven會(huì)自動(dòng)下載它們。JavaScript的構(gòu)建工具Grunt也很類似,有一個(gè)構(gòu)建描述文件包含了構(gòu)建所需要的依賴。Golang為了完成構(gòu)建,甚至還可以包含GitHub庫的鏈接。
C和C++構(gòu)建存在著不同的挑戰(zhàn)。許多項(xiàng)目使用GNU的Autotools,它的Autoconf并不描述需要的依賴,而是適配主機(jī)上可用的依賴。所以,為了構(gòu)建文本編輯器Emacs,你需要先運(yùn)行配置腳本來查明構(gòu)建系統(tǒng)上潛在的諸多依賴中哪一個(gè)是可用的。
讓軟件在許多不同的系統(tǒng)配置上都可用是一個(gè)很有用的功能,因?yàn)槲覀儾⒉豢偸窍胱尳ɑ谥亓考?jí)的配置。在這種情況下,我們需要確定哪個(gè)功能百分百終將可用。我們當(dāng)然不想因?yàn)樵诋a(chǎn)品環(huán)境上遺漏功能而大吃一驚。
RPM( Red Hat Package Manager)系統(tǒng),用于基于Red Hat的各種系統(tǒng),給這個(gè)問題提供了一個(gè)解決方案。RPM系統(tǒng)的核心是一個(gè)稱為spec文件的構(gòu)件描述文件。它列出了需要成功構(gòu)建所需的構(gòu)建依賴、構(gòu)建命令,還有使用的配置選項(xiàng)。因?yàn)橐粋€(gè)spec文件本質(zhì)上是一個(gè)基于宏的shell腳本,所以你可以用它來構(gòu)建許多類型的軟件。砌,M系統(tǒng)也認(rèn)為構(gòu)建源代碼應(yīng)該從零開始??梢杂脴?gòu)建之前通過spec文件給源代碼打包的方式適配源代碼。
最終工件
在使用RPM系統(tǒng)完成構(gòu)建之后,你得到了一個(gè)RPM文件,這種類型可以很方便地給Red Hat系列操作系統(tǒng)部署工件。對(duì)于Debian系的發(fā)行版來說,你得到的是個(gè).deb文件。 Maven構(gòu)建的最終結(jié)果一般是企業(yè)級(jí)檔案,簡(jiǎn)稱EAR文件。它包含著Java企業(yè)級(jí)應(yīng)用。
它是我們之后要部署到生產(chǎn)服務(wù)器上的最終部署工件。
盡管如此,即使在構(gòu)建工件的時(shí)候,我們也需要理解如何部署它們。現(xiàn)在,我們將要使用以下的經(jīng)驗(yàn)法則:操作系統(tǒng)級(jí)別的包優(yōu)于特定的包。這是我的個(gè)人喜好,其他人可能不同意。
讓我們簡(jiǎn)要地討論一下這個(gè)經(jīng)驗(yàn)法則的背景和其他的方案。
作為一個(gè)實(shí)際的例子,讓我們考慮Java EAR的部署。通常,我們有幾種方法來實(shí)現(xiàn)。
想了解更多IT資訊,請(qǐng)?jiān)L問中培偉業(yè)官網(wǎng):中培偉業(yè)