摘要:最近在將公司的持續(xù)集成架構做一個系統(tǒng)的調(diào)整象踊,調(diào)整過程中受到了RDC團隊大量的幫助另假,所以利用國慶時間寫了幾篇RDC的分享芯杀,希望能讓更多的人了解和用好RDC這個產(chǎn)品肤舞。 我會把我最近3個月的使用體會分成5個部分:使用RDC的動機纲刀、PHP項目集成项炼、JS項目集成、JAVA項目集成示绊、Docker類項目集成這5...
最近在將公司的持續(xù)集成架構做一個系統(tǒng)的調(diào)整锭部,調(diào)整過程中受到了RDC團隊大量的幫助,所以利用國慶時間寫了幾篇RDC的分享面褐,希望能讓更多的人了解和用好RDC這個產(chǎn)品拌禾。
我會把我最近3個月的使用體會分成5個部分:使用RDC的動機、PHP項目集成展哭、JS項目集成湃窍、JAVA項目集成、Docker類項目集成這5個分支來寫
因為近期RDC的迭代比較頻繁匪傍,所以我的分享會比較的淺您市,點到為止,僅供參考析恢,目錄:
1墨坚、RDC如何耦合進我們的業(yè)務
2、如何構建一個基于Composer的PHP項目
3、如何構建一個基于NodeJS的前后端項目
4泽篮、如何構建一個基于Maven的Java項目
5盗尸、RDC + 容器服務完成持續(xù)集成
一、RDC基礎操作
在開始一切之前您需要熟悉RDC的一些基礎操作帽撑,創(chuàng)建一個項目泼各,然后在這個項目中創(chuàng)建一個應用,然后讓這個應用關聯(lián)某個代碼分支亏拉。這樣基礎工作就完成了扣蜻,我這里不再贅述了,因為比較簡單及塘,只需要注冊個阿里云賬號莽使,然后去 rdc.aliyun.com 創(chuàng)建/加入個企業(yè)就行了。
本文所有的體驗均基于【自由模式】的應用笙僚。
值得一提的是芳肌,應用代碼源目前支持的是阿里云的代碼倉庫,基于gitlab肋层,地址是 code.aliyun.com亿笤,從我2年的使用經(jīng)驗來看,還算好用栋猖,也不收費净薛,較為靠譜。
在創(chuàng)建應用時蒲拉,我們需要選擇對應的配置肃拜,如下圖:
創(chuàng)建完應用后,進入【項目】--》【流水線】全陨,找到剛才創(chuàng)建應用的【同名流水線】
點擊流水線名稱可以看到具體的流水線運行情況和對應節(jié)點爆班,如下圖:
可以看到有4個面板:構建、日常辱姨、預發(fā)柿菩、正式。
分別對應的是:構建打包雨涛、發(fā)布到日常環(huán)境枢舶、發(fā)布到預發(fā)環(huán)境、發(fā)布到正式環(huán)境替久。
RDC在創(chuàng)建應用時自動的為你生成了一個標準模板流水線凉泄,但是我們一般用不著,所以需要對流水線進行修改蚯根,去除無用的節(jié)點后众,添加我們自己的配置。點擊界面上的【編輯流水線】按鈕就可以進入修改界面。
我們先從構建開始蒂誉,所以先暫時刪除日常教藻、預發(fā)、正式這3個部署節(jié)點右锨,僅保留構建這一個節(jié)點即可括堤。下面的配置暫時不進行調(diào)整。刪除完畢后保存流水線即可绍移,效果如下:
至此我們已經(jīng)完成了基礎的準備工作悄窃,下一步就開始進行代碼的構建工作了。
在開始下一步工作之前蹂窖,請重新git pull一下您的代碼到本地轧抗,會看到一個由RDC服務自動生成的配置文件:==xxx.release== 這個文件相當重要,請注意恼策,下面將會說明如何通過此文件完成個性化構建鸦致。
二潮剪、基于NodeJS的前后端項目構建
因為node類項目一般都通過NPM來維護第三方庫涣楷,并且一般會通過webpack來進行構建、合并抗碰、壓縮狮斗,所以在RDC構建時需要完成依賴包下載及webpack編譯的相關工作。
這里需要找到我們上一章節(jié)中提到的:==xxx.release== 文件弧蝇,xxx代表你的應用名碳褒,所以我這里看到的文件名是:ms-autotags.release
這個文件的配置規(guī)范可以參考:==https://help.aliyun.com/document_detail/59293.html==
打開這個文件可以看到,已經(jīng)有一些預先定義好的配置:
# 構建源碼語言類型code.language=scripts# 應用部署腳本deploy.appctl.path=deploy.sh# Docker鏡像構建之后push的倉庫地址docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abced
上面的配置是不能用的看疗,我們需要將其修改為如下內(nèi)容:
# 語言類型沙峻,需要修改,否則無法調(diào)用對應的構建環(huán)境code.language=node8.x#構建命令build.command=sh build.sh# 應用部署腳本两芳,先注釋掉摔寨,暫時用不上# deploy.appctl.path=deploy.sh
↓↓↓↓ 配置說明:
code.language=nodejs
代表使用的是nodejs作為代碼語言類型。支持以下枚舉:
php5.6怖辆,php7.0是复,node6.x,node7.x竖螃,node8.x,oracle-jdk1.7,oracle-jdk1.8茁肠, oracle-jdk1.9画髓,scripts
如果有使用過jenkins的同學,那么應該比較好理解,RDC的構建是通過Docker容器技術實現(xiàn)的画拾,類似于配置好環(huán)境的jenkins構建機关摇,RDC團隊針對各種語言準備了不同的鏡像作為構建宿主。
build.command=shbuild.sh
這一行的意思是碾阁,使用一個特定的腳本來進行自定義構建输虱,因為構建有時候需要處理的東西很多,一行命令解決不了脂凶,所以需要一個自定義構建腳本宪睹,此處我設置的腳本在代碼根目錄下,創(chuàng)建一個build.sh腳本蚕钦。如果你的構建只有1句話亭病,可以直接寫在“=”號后面,使用自定義腳本是為了更清晰和更靈活嘶居。
↓↓↓↓ build.sh腳本內(nèi)容:
echo"##### npm to taobao"npm install -g cnpm --registry=https://registry.npm.taobao.orgecho"##### cnpm install --save"cnpm install --saveecho"##### cnpm build"cnpm run build
逐句解釋:
npminstall -g cnpm --registry=https://registry.npm.taobao.org
使用npm的中國全量資源罪帖,cnpm由淘寶維護,國內(nèi)最快的鏡像站點邮屁。切換的目的就是為了構建快一些整袁,因為RDC目前暫時不支持海外構建,所以不改可能會導致構建很慢佑吝。
cnpminstall--save
最核心的一句話坐昙,安裝所有第三方庫依賴,這一句執(zhí)行后如果正確芋忿,就會生成node_modules文件夾了炸客。也意味著如果你使用開源框架,你的angularjs戈钢、vue等框架就安裝成功了痹仙。
cnpmrunbuild
這句話是使用webpack完成打包工作,前端項目通常是生成dist文件夾殉了,此文件夾為項目的產(chǎn)出物开仰。
我們已經(jīng)完成了應用的創(chuàng)建+流水線的修改,那么我們運行一次構建試一下宣渗,只需要點擊【運行流水線】按鈕即可抖所,運行后等幾秒刷新一下頁面,效果如下:
可以看到執(zhí)行時間痕囱、版本號田轧、日志、操作人等信息鞍恢。
如果構建失敗了傻粘,可以通過構建流程----日志詳情面板看到具體的錯誤原因每窖,有日志排查起來不太難,但是RDC的構建還是偏向黑盒弦悉,所以盡量熟練或在本地先把相關命令跑通后再上傳到==xxx.release==文件里去進行RDC構建窒典。
可以看到初始的版本號是:v0.0.1-1,如果你的構建一直失敗稽莉,版本號會變成v0.0.1-3瀑志、v0.0.1-8、v0.0.1-18污秆、v0.0.1-N劈猪。
如果你的流水線全流程跑完了,則會自動疊加一個小版本號變?yōu)関0.0.2-1良拼,所以這種構建方式清晰明了战得,還算好用。
三庸推、如何輸出為一個Docker鏡像
我們已經(jīng)完成了代碼的打包編譯工作常侦,下一步我們需要把完整的代碼封裝成一個Docker鏡像,我們需要對==xxx.release==文件做如下改動:
# 語言類型贬媒,需要修改聋亡,否則無法調(diào)用對應的構建環(huán)境code.language=node8.x#構建命令build.command=sh build.sh# Docker 構建配置docker.file=Dockerfile# Docker鏡像構建之后push的倉庫地址docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abceddocker.tag=ci-${PACKAGE_LABEL}# 應用部署腳本,先注釋掉掖蛤,暫時用不上# deploy.appctl.path=deploy.sh
相對于單純的構建杀捻,如果需要生成Docker鏡像則需要補充幾個配置項,拆解說明如下:
docker.file=Dockerfile
指明dockerfile文件的位置和文件名蚓庭,默認就是根目錄下的Dockerfile文件。
docker.repo=registry.cn-hangzhou.aliyuncs.com/xxx/abced
指定你的docker鏡像倉庫仅仆,建議使用阿里云提供的倉庫器赞,免費,速度快墓拜,可以加速docker hub的內(nèi)容港柜,無縫對接RDC服務,地址是 dev.aliyun.com 咳榜,此處的**xxx**對應的是你的名稱空間夏醉,**abced**對應的是你的鏡像名稱。
docker.tag=ci-${PACKAGE_LABEL}-${TIMESTAMP}
這里指定你的docker鏡像的tag名涌韩,使用了環(huán)境變量進行拼接畔柔。
${PACKAGE_LABEL}代表的是包名,這個參數(shù)在流水線配置里可以改臣樱,默認是default靶擦。
${TIMESTAMP}代表的是當前時間戳腮考,格式是:20171008224350 這種樣子。
有的項目一份代碼可能產(chǎn)生多個docker鏡像就需要通過這種方式來動態(tài)生成tag名玄捕,防止覆蓋踩蔚,也便于回滾。
關于構建傳參枚粘,可以參考這個文章:https://help.aliyun.com/document_detail/59297.html
那么此處最終生成的tag名是這樣的:ci-default-20171008224350
結合倉庫名和鏡像名馅闽,最終會生成鏡像tag地址為:
registry.cn-hangzhou.aliyuncs.com/xxx/abced:ci-default-20171008224350
四、后記
NodeJS構建 + Docker構建就說到這里馍迄,因為主要是為了介紹RDC捞蛋,所以Docker部分就挑重點講了,如何編寫Dockerfile文件請自行學習柬姚。
輸出成Docker鏡像后拟杉,如何使用RDC部署到容器相關問題我會單獨開一個文章來分享。