部署自動(dòng)打包環(huán)境
概述
- 基于Gitlab-CICD配置的自動(dòng)打包環(huán)境原押。
- 在Gitlab上創(chuàng)建Tag時(shí)乍构,會(huì)執(zhí)行包含Deploy的CICD操作旨袒。
- 創(chuàng)建方法:左側(cè)菜單欄->Repository->Tags->New tag瓣铣。
- 在Deploy的Job成功后,將會(huì)把對(duì)應(yīng)的壓縮包發(fā)布至指定目錄中。
通過(guò)Gitlab的打包方式
- 完整包:創(chuàng)建前綴為'tag_full_'的tag渡处。
- tag_full_win_version: 僅打包win的完整包镜悉。
- tag_full_ios_version: 僅打包ios的完整包。
- tag_full_android_version: 僅打包android的完整包医瘫。
- tag_full_version: 未指定版本侣肄,默認(rèn)為打包三種版本(win,ios,android)的完整包。
- 打包三種版本的完整包的tag一般取名為tag_full_all_version醇份。
- 補(bǔ)丁包:創(chuàng)建前綴'tag_patch_'的tag稼锅。
- tag_patch_ios_version: 僅打包ios的補(bǔ)丁包。
- tag_patch_andorid_version: 僅打包android的補(bǔ)丁包僚纷。
- tag_patch_version: 未指定版本矩距,默認(rèn)為打包兩種版本(ios和android)的補(bǔ)丁包。
- 打包兩種版本的補(bǔ)丁包的tag一般取名為tag_patch_all_version畔濒。
如何創(chuàng)建自動(dòng)更新的補(bǔ)丁
-
概述:
- 補(bǔ)丁是基于上一個(gè)完整包的版本進(jìn)行的資源/腳本文件修改剩晴。
- 通過(guò)補(bǔ)丁包可替換原本完整包中的資源/腳本文件锣咒,實(shí)現(xiàn)熱更新侵状。
-
自動(dòng)更新機(jī)制:
- 基于指定版本的資源及腳本文件生成MD5的文件記錄。
- md5_assets.txt: 客戶端的資源文件的MD5值毅整。
- md5_lua.txt: 客戶端的lua腳本的MD5值趣兄。
- md5_scripts.txt: 客戶端的C#腳本的MD5值。(C#腳本無(wú)法用于自動(dòng)更新)
- patch.json: 記錄所修改的資源/腳本文件悼嫉。
- 通過(guò)比較生成的MD5的記錄艇潭, 從而區(qū)分哪些文件發(fā)生了變化。
- 基于指定版本的資源及腳本文件生成MD5的文件記錄。
-
生成補(bǔ)丁的詳細(xì)操作:
- 將項(xiàng)目切換至指定完整包的版本戏蔑,通過(guò)菜單欄->Build->生成AssetBundle完整包蹋凝。
- 在生成AB完整包后,確保獲取到的MD5文件為獲取指定完整包的版本的MD5值总棵。
- 在生成AssetBundle完整包后鳍寂,可進(jìn)行資源/腳本文件的修改。
- 在確保資源/腳本文件修改完成后情龄,新增一行版本號(hào)迄汛,作為補(bǔ)丁版本。
- 版本號(hào)文件:/client/Assets/StreamingAssets/version.txt
- 一般補(bǔ)丁包的版本號(hào)只在原始版本號(hào)的基礎(chǔ)上骤视,迭代后兩位小版本鞍爱。
- 獲取補(bǔ)丁包的MD5文件,通過(guò)菜單欄->Build->新增AssetBundle補(bǔ)丁包专酗。
- 在新增AB補(bǔ)丁包后睹逃,獲取到補(bǔ)丁包的MD5文件記錄。
- 提交補(bǔ)丁包:
- 將所修改的資源/腳本文件及其補(bǔ)丁包的MD5文件記錄提交只版本庫(kù)上祷肯。
- 通過(guò)gitlab創(chuàng)建該分支的tag沉填,tag名稱為tag_patch_version粱玲。
- 執(zhí)行完該tag的CICD后,可在指定目錄獲取到補(bǔ)丁包拜轨。
- 將項(xiàng)目切換至指定完整包的版本戏蔑,通過(guò)菜單欄->Build->生成AssetBundle完整包蹋凝。
-
生成完整包的流程圖:
graph TD Build[創(chuàng)建并切換至指定版本的分支] FullPackage_MD5[完整包的MD5文件記錄 ] CurrentBranch_Local[當(dāng)前分支-本地] CurrentBranch_Remote[當(dāng)前分支-遠(yuǎn)程] PackFull[生成完整包] subgraph 獲取完整包的MD5 Build FullPackage_MD5 CurrentBranch_Local CurrentBranch_Remote end subgraph 獲取完整包 Gitlab PackFull end Build -- 生成該版本AB完整包 --> FullPackage_MD5 FullPackage_MD5 -- 提交完整包的MD5文件 --> CurrentBranch_Local CurrentBranch_Local -- Git Sync & Push --> CurrentBranch_Remote CurrentBranch_Remote --> Gitlab Gitlab -- 通過(guò)Gitlab創(chuàng)建當(dāng)前分支的tag,tag名稱前綴為tag_full_ --> PackFull
-
生成補(bǔ)丁包的流程圖:
graph TD Build[創(chuàng)建并切換至指定版本的分支] FullPackage_MD5[完整包的MD5文件記錄](méi) PatchPackage_MD5[補(bǔ)丁包的MD5文件記錄](méi) CurrentBranch_Local[當(dāng)前分支-本地] CurrentBranch_Remote[當(dāng)前分支-遠(yuǎn)程] PackPatch[生成補(bǔ)丁包] subgraph 獲取補(bǔ)丁包的MD5 Build FullPackage_MD5 PatchPackage_MD5 CurrentBranch_Local CurrentBranch_Remote end subgraph 獲取補(bǔ)丁包 Gitlab PackPatch end Build --生成該版本AB完整包--> FullPackage_MD5 FullPackage_MD5 -- 修改資源/腳本文件以及在version.txt中新增版本號(hào) --> PatchPackage_MD5 PatchPackage_MD5 -- 提交修改的資源/腳本文件以及補(bǔ)丁包的MD5文件 --> CurrentBranch_Local CurrentBranch_Local -- Git Sync & Push --> CurrentBranch_Remote CurrentBranch_Remote --> Gitlab Gitlab -- 通過(guò)Gitlab創(chuàng)建當(dāng)前分支的tag, tag名稱前綴為tag_patch_ --> PackPatch
如何搭建Gitlab-CICD的平臺(tái)
-
概述:
- CI/CD是指持續(xù)集成/持續(xù)部署抽减。
- 持續(xù)集成(Continuous integration)是一種軟件開(kāi)發(fā)實(shí)踐,每次集成都通過(guò)自動(dòng)化的構(gòu)建(包括編譯橄碾,發(fā)布卵沉,自動(dòng)化測(cè)試)來(lái)驗(yàn)證,從而盡早地發(fā)現(xiàn)集成錯(cuò)誤法牲。
- 持續(xù)部署(continuous deployment)是通過(guò)自動(dòng)化的構(gòu)建史汗、測(cè)試和部署循環(huán)來(lái)快速交付高質(zhì)量的產(chǎn)品。
- 中心思想是當(dāng)每一次push到gitlab的時(shí)候拒垃,都會(huì)觸發(fā)一次腳本執(zhí)行停撞,然后腳本的內(nèi)容包括了測(cè)試,編譯悼瓮,部署等一系列自定義的內(nèi)容戈毒。
- CI/CD是指持續(xù)集成/持續(xù)部署抽减。
-
CI/CD的好處:
- 快速發(fā)現(xiàn)錯(cuò)誤。
- 每完成一點(diǎn)更新横堡,就集成到主干上埋市,可以快速發(fā)現(xiàn)錯(cuò)誤,定位錯(cuò)誤也比較容易命贴。
- 防止分支大幅度偏離主干道宅。
- 如果不是經(jīng)常集成,主干又在不斷更新胸蛛,會(huì)導(dǎo)致以后集成的難度變大污茵,甚至難以集成。
- 快速發(fā)現(xiàn)錯(cuò)誤。
-
CI/CD中的基本概念:
-
Pipeline:
- Pipeline表示構(gòu)建任務(wù)葬项,包含測(cè)試泞当,編譯,部署等一系列的階段的執(zhí)行玷室。
- 每次提交都會(huì)創(chuàng)建一條Pipeline零蓉。
-
Stages:
- Stages表示構(gòu)建階段,屬于Pipeline的組成單元穷缤。
- Stages的特點(diǎn)為:
- 當(dāng)前Stages都執(zhí)行成功秫筏,才會(huì)執(zhí)行下一個(gè)Stages江滨。
- 所有的Stages都執(zhí)行成功薇溃, 該pipeline才會(huì)成功搜锰。
- 一般將Stages分為三個(gè)階段:build,test,deploy秸脱。
-
Jobs:
- Jobs表示構(gòu)建工作落包,屬于Stages的組成單元。
- Jobs的特點(diǎn)為:
- 每個(gè)Stages中的所有Job執(zhí)行成功摊唇,該Stages才會(huì)執(zhí)行成功咐蝇。
- 默認(rèn)情況下,每個(gè)Job都是單獨(dú)的環(huán)境巷查,每個(gè)job直接不互相干擾有序。
- 如果存在job之間相互依賴,則可以通過(guò)artifacts或cache實(shí)現(xiàn)岛请。
- 具體實(shí)現(xiàn)通過(guò).gitlab.yml實(shí)現(xiàn):https://docs.gitlab.com/ce/ci/yaml/README.html
-
Gitlab-CI:
- Gitlab自帶的持續(xù)集成系統(tǒng)旭寿,.gitlab.yml的腳本解析就由它來(lái)負(fù)責(zé)。
-
Gitlab-Runner:
- 負(fù)責(zé).gitlab.yml腳本的部分執(zhí)行崇败,.gitlab.yml的script部分的運(yùn)行就是由runner來(lái)負(fù)責(zé)的盅称。
- Gitlab-CI通過(guò)解析.gitlab.yml文件后,根據(jù)里面的規(guī)則后室,分配對(duì)應(yīng)的runner執(zhí)行相應(yīng)腳本script缩膝。
- 每個(gè)runner都有自己的一個(gè)tag,作為向Gitlab注冊(cè)的標(biāo)簽咧擂,Gitlab-CI可根據(jù)該tag執(zhí)行指定runner逞盆。
- 一臺(tái)服務(wù)器/pc可以注冊(cè)多個(gè)Runner,要讓Runner同時(shí)運(yùn)行松申,則需要進(jìn)一步參考官方文檔
-
.gitlab.yml:
- 必須存在與git項(xiàng)目的根目錄下的一個(gè)文件, 記錄了一系列的執(zhí)行階段和執(zhí)行規(guī)則。
-
Pipeline流程圖:
graph LR check1{是否全部成功} check2{是否全部成功} Job_build1 --> check1 Job_build2 --> check1 check1 --> Job_test1 check1 --> Job_test2 Job_test1 --> check2 Job_test2 --> check2 check2 --> Job_deploy1 check2 --> Job_deploy2 subgraph States1 Job_build1 Job_build2 end subgraph States2 Job_test1 Job_test2 end subgraph States3 Job_deploy1 Job_deploy2 end
-
Gitlab-CI/CD流程圖:
graph LR Gitlab-CI[Gitlab-ci->解析.gitlab.yml] subgraph 服務(wù)器/PC3 RunnerN end subgraph 服務(wù)器/PC2 Runner2 end subgraph 服務(wù)器/PC1 Runner1 end Developer -- push --> Gitlab Gitlab --> Gitlab-CI Gitlab-CI --tag1--> Runner1 Gitlab-CI --tag2--> Runner2 Gitlab-CI --tagN--> RunnerN
-
-
注冊(cè)Gitlab-Runner:
基于已搭建好的Gitlab俯逾,注冊(cè)Runner來(lái)實(shí)現(xiàn)CI/CD贸桶。
-
準(zhǔn)備工作:
- 下載Gitlab-Runner:
- 下載地址:https://docs.gitlab.com/runner/install/index.html
- Gitlab-Runner的版本號(hào) <= Gtilab的版本號(hào)。
- 獲取Gitlab上項(xiàng)目的管理員權(quán)限桌肴,打開(kāi)左側(cè)菜單欄->Setting->CI/CD->Runner皇筛。
- 在Specific Runners獲取Gitlab的URL和Token。
- 如果gitlab為https鏈接坠七,則需要獲取Gitlab的公鑰證書:
- 打開(kāi)瀏覽器水醋,點(diǎn)擊網(wǎng)址框左側(cè)的鎖圖標(biāo)。
- 切換至下一頁(yè)彪置,點(diǎn)擊更多信息拄踪。
- 在彈出的頁(yè)面信息框->安全->網(wǎng)站身份->查看證書。
- 在彈出的證書查看器->詳細(xì)信息->導(dǎo)出拳魁。
- 獲取到該gitlab.crt惶桐。
- 下載Gitlab-Runner:
-
開(kāi)始注冊(cè):
-
打開(kāi)命令行執(zhí)行:
gitlab-runner-windows-amd64.exe register ^ --non-interactive ^ --name win7_test_2 ^ --tag-list win7_test_2 ^ --url https://m68gitlab.g-bits.com/ ^ --registration-token CAsBb_m2cRzzBMnNJeJx ^ --executor shell ^ --tls-ca-file ./m68gitlab.g-bits.com.crt
-
上述命令選項(xiàng)含義(*為必選項(xiàng)):
--non-interactive 非交互式 --name 該Special Runner服務(wù)名,便于后臺(tái)管理(查看、刪除姚糊、調(diào)用)* --tag-list 該Special Runner標(biāo)簽贿衍,集成腳本中可以通過(guò)指定tag關(guān)聯(lián) --url Gitlab的地址* --registration-token 項(xiàng)目里剛才看到的token,互相關(guān)聯(lián)的標(biāo)志* --excutor 規(guī)定集成腳本執(zhí)行的環(huán)境救恨,還可以是shell贸辈,docker等*
注冊(cè)成功后,可在項(xiàng)目的Setting->CI/CD->Runner中查看到新注冊(cè)的Runner信息肠槽。
-
-
運(yùn)行Gitlab-Runner:
-
打開(kāi)命令行執(zhí)行:
gitlab-runner-windows-amd64.exe run
-
-
注冊(cè)Gitlab-runner服務(wù):
即開(kāi)機(jī)自動(dòng)通過(guò)System賬號(hào)運(yùn)行Gitlab-runner裙椭。
-
注冊(cè)Gitlab-runner服務(wù),默認(rèn)的服務(wù)名為gitlab-runner署浩。
- 想要在同一臺(tái)PC上注冊(cè)多個(gè)Gitlab-runner服務(wù)揉燃,需要自定義服務(wù)名。
- 自定義服務(wù)名的方式:--service name
- 想要在同一臺(tái)PC上注冊(cè)多個(gè)Gitlab-runner服務(wù)揉燃,需要自定義服務(wù)名。
-
打開(kāi)命令行執(zhí)行:(需要使用管理員身份執(zhí)行)
gitlab-runner-windows-amd64.exe install 或 gitlab-runner-windows-amd64.exe install --user name --password pw
-
Runner服務(wù)管理相關(guān)指令:
gitlab-runner-windows-amd64.exe start // 開(kāi)啟服務(wù) gitlab-runner-windows-amd64.exe stop // 停止服務(wù) gitlab-runner-windows-amd64.exe uninstall // 卸載服務(wù)
-
Gitlab-Runner流程圖:
graph LR PC[服務(wù)器/PC] Developer -- 獲取gitlab的公鑰證書,URL,Token --> PC PC -- 注冊(cè)Runner --> Gitlab PC -- 運(yùn)行Runner --> Gitlab Gitlab -- 通知執(zhí)行 --> Gitlab-CI
-
配置.gitlab.yml文件
-
基本模板:
stages: - test - deploy win_test: script: - echo win_test - call test.bat stage: test tags: - win7_test win_deploy: script: - echo win_deploy - call deploy.bat stage: deploy tags: - win7_test
-
上述主要參數(shù):
- states:
- 構(gòu)建階段筋栋,自定義要執(zhí)行的幾個(gè)階段炊汤。
- win_test,win_deploy:
- 構(gòu)建工作弊攘,具體要執(zhí)行的內(nèi)容抢腐。
- script:
- 該job所要執(zhí)行的命令行指令。
- stage:
- 限定該job屬于哪一個(gè)stages襟交。
- tags:
- 限定該job執(zhí)行的腳本是在哪一個(gè)Runner上執(zhí)行迈倍。
- states:
-
測(cè)試命令,檢驗(yàn)語(yǔ)法:
- 可在 GitLab->CI/CD->Pipelines->CI Lint 中進(jìn)行執(zhí)行。
-
測(cè)試命令,檢驗(yàn)語(yǔ)法:
- 可在 GitLab->CI/CD->Pipelines->CI Lint 中進(jìn)行執(zhí)行捣域。
-
返回值獲取
- 通過(guò)在批處理中啼染,獲取運(yùn)行腳本的返回值。errorlevel指令焕梅。
- 從而迹鹅,判斷是否exit 0 或者exit -1。實(shí)現(xiàn)樣例是否通過(guò)的判斷贞言。
-
GitLab-CI中的cache和artifacts的區(qū)別
- 用Docker運(yùn)行Gitlab-Runner斜棚,cache會(huì)生成一些臨時(shí)容器,不容易清理该窗。
- cache不一定能夠命中弟蚀,artifacts肯定命中。
- cache與機(jī)器上Runner緩存的容量相關(guān)酗失。
- 能否使用cache取決于機(jī)器是否生成過(guò)cache义钉,artifacts則每次都能從Gitlab下載。
- artifacts中定義的部分级零,會(huì)自動(dòng)生成断医,并可以傳到下面的job中解壓使用滞乙,避免了重復(fù)依賴安裝等功能。
- artifacts可以設(shè)置自動(dòng)過(guò)期時(shí)間, 過(guò)期自動(dòng)刪除鉴嗤,cache不會(huì)自動(dòng)清理斩启。
- artifacts會(huì)先傳到GitLab服務(wù)器, 然后需要時(shí)再重新下載, 所以這部分也可以在GitLab下載和瀏覽。
- artifacts在jobs成功時(shí)才會(huì)將指定文件上傳至Gitlab醉锅。
-
-
自動(dòng)打包環(huán)境的流程圖:
graph LR Developer -- 通過(guò)Gitlab創(chuàng)建完整包/補(bǔ)丁包的tag --> Gitlab-CI Gitlab-CI -- 解析.gitlab.yml執(zhí)行命令行指令 --> 執(zhí)行打包操作
graph TD pack[執(zhí)行打包操作] pack_full[執(zhí)行打完整包操作] pack_patch[執(zhí)行打補(bǔ)丁包操作] packing_full[執(zhí)行指定版本的打完整包操作] packing_patch[執(zhí)行指定版本的打補(bǔ)丁包操作] packing_full_all[執(zhí)行所有版本android,ios,win的打完整包操作] packing_patch_all[執(zhí)行所有版本android,ios的打補(bǔ)丁包操作] transform_package[傳輸壓縮包文件至指定目錄](méi) check_tag_pre{識(shí)別tag名稱} check_tag_full{tag名稱是包含android/ios/win} check_tag_patch{tag名稱是包含android/ios} pack --> check_tag_pre check_tag_pre -- tag名稱前綴為tag_full_ --> pack_full check_tag_pre -- tag名稱前綴為tag_patch_ --> pack_patch pack_full --> check_tag_full pack_patch --> check_tag_patch check_tag_full -- 是 --> packing_full check_tag_full -- 否 --> packing_full_all check_tag_patch -- 是 --> packing_patch check_tag_patch -- 否 --> packing_patch_all packing_full --> transform_package packing_patch --> transform_package packing_full_all --> transform_package packing_patch_all --> transform_package