saltstack部署java应用失败无日志——CICD 部署
大家好,我是烤鴨:
? ? 最近在搞公司的CICD,遇到各種問(wèn)題。復(fù)盤(pán)總結(jié)一下。
CICD 架構(gòu)
這篇文章寫(xiě)得很詳細(xì),可以看一下
https://linux.cn/article-9926-1.html
而這里只是結(jié)合現(xiàn)在的情況分析下:
CI 持續(xù)集成(Continuous Integration)
持續(xù)交付的目標(biāo)是擁有一個(gè)可隨時(shí)部署到生產(chǎn)環(huán)境的代碼庫(kù)。
CD 持續(xù)交付(Continuous Delivery)、持續(xù)部署(Continuous Deployment)
作為持續(xù)交付——自動(dòng)將生產(chǎn)就緒型構(gòu)建版本發(fā)布到代碼存儲(chǔ)庫(kù)——的延伸,持續(xù)部署可以自動(dòng)將應(yīng)用發(fā)布到生產(chǎn)環(huán)境。
自動(dòng)化的、高效的,并且可重復(fù)的
目前的CICD架構(gòu)(封裝jenkins和發(fā)布系統(tǒng),簡(jiǎn)單夠用就行)
可以看到目前的CICD部署生產(chǎn)和測(cè)試環(huán)境是分開(kāi)的,雖然能完成上面定義的功能,但是有很大的問(wèn)題。
發(fā)布測(cè)試環(huán)境可以進(jìn)行自動(dòng)化測(cè)試,但發(fā)布生產(chǎn)環(huán)境是從jenkins打包后發(fā)布的(并不是直接copy的測(cè)試時(shí)的包)。
這就有一個(gè)問(wèn)題是生產(chǎn)環(huán)境的發(fā)包可能和測(cè)試的不一致(有時(shí)候 測(cè)試說(shuō)測(cè)的時(shí)候沒(méi)問(wèn)題,開(kāi)發(fā)說(shuō)沒(méi)問(wèn)題,運(yùn)維也是按流程來(lái)的,問(wèn)題就在這),持續(xù)交付的作用并沒(méi)有發(fā)揮出來(lái)。
優(yōu)化方式
目前的CICD 系統(tǒng)也只是封裝了一層jenkins和發(fā)布系統(tǒng),未來(lái)還會(huì)改版的。
待優(yōu)化的部分:自動(dòng)化測(cè)試、藍(lán)綠部署、對(duì)多個(gè)版本的跟蹤發(fā)布。
自動(dòng)化測(cè)試 單元測(cè)試和持續(xù)測(cè)試(集成測(cè)試、功能測(cè)試、驗(yàn)收測(cè)試),目前來(lái)看 單元測(cè)試的部分是缺失的,很少寫(xiě)可執(zhí)行的單元測(cè)試,而且沒(méi)有地方執(zhí)行和查看。
藍(lán)綠部署指的是部分流量切換,預(yù)發(fā)環(huán)境和生產(chǎn)環(huán)境分開(kāi)。目前這一部分是空白的,需要測(cè)試介入。(以前做的時(shí)候用白名單攔截入口,但是白名單和指定和維護(hù)需要線下和線上同時(shí)維護(hù),特別麻煩。銷(xiāo)售聯(lián)系到用戶(hù),要到手機(jī)號(hào)后,加入白名單。)
對(duì)多個(gè)版本的跟蹤發(fā)布指的是不同版本的協(xié)同開(kāi)發(fā),很難跟蹤,不過(guò)目前是沒(méi)有類(lèi)似場(chǎng)景的,之前倒是遇到過(guò),一個(gè)大版本開(kāi)發(fā)中,又提了對(duì)當(dāng)前版本的更新維護(hù),交付時(shí)間上交叉、代碼合并出現(xiàn)問(wèn)題,測(cè)試環(huán)境的代碼維持不同的版本,對(duì)測(cè)試也是挑戰(zhàn)。
單元測(cè)試 目前來(lái)看比較容易,強(qiáng)制編寫(xiě)單元測(cè)試,如果執(zhí)行失敗,則算項(xiàng)目失敗,單元測(cè)試的標(biāo)準(zhǔn)應(yīng)該以產(chǎn)品的需求為主,測(cè)試人員檢驗(yàn)。打包的時(shí)候可以直接執(zhí)行單元測(cè)試,只是缺少對(duì)需求的關(guān)聯(lián)。(測(cè)試壓力大了,規(guī)范養(yǎng)成了,就會(huì)容易很多)
藍(lán)綠部署需要一套完整的預(yù)發(fā)環(huán)境(就是另一套生產(chǎn)環(huán)境,產(chǎn)生的訂單數(shù)據(jù)再進(jìn)行同步,對(duì)訂單數(shù)據(jù)進(jìn)行tag處理)。至于用戶(hù)群體可以以指定的規(guī)則選擇(比如根據(jù)用戶(hù)畫(huà)像等等,用戶(hù)使用習(xí)慣)。搭建一整套環(huán)境是最復(fù)雜的,尤其是針對(duì)多個(gè)部門(mén)間的協(xié)同,每個(gè)部門(mén)的規(guī)則又不一樣,缺少一個(gè)都不行。(難的不是技術(shù),是溝通協(xié)作)
多版本的跟蹤發(fā)布,這個(gè)其實(shí)遇到的場(chǎng)景比較少,像我上面遇到的其實(shí)是比較夸張了。如果真的遇到了,需要準(zhǔn)備針對(duì)多套測(cè)試的多套測(cè)試環(huán)境,保證測(cè)試的分支代碼沒(méi)問(wèn)題。其次要保證測(cè)試測(cè)過(guò)的代碼和線上的完全一致,不要出現(xiàn)因?yàn)榇a合并等問(wèn)題。(如果正在開(kāi)發(fā) feature分支,master分支提一個(gè)hotfix合并,要保證提測(cè)的feature是包含這個(gè)hotfix的,上線可以不合并master,直接以feature上線,上線完成后再合并。)
目前的CICD框架
用的比較多的就是 jenkins和 hudson了。
- 項(xiàng)目頁(yè)面:
https://jenkins.io/ - 源代碼:
https://github.com/jenkinsci/jenkins
github用的是 Travis CI
- 項(xiàng)目頁(yè)面:
https://docs.travis-ci.com/ - 源代碼:
https://github.com/travis-ci/travis-ci
gitlab出了GitLab CI
- 項(xiàng)目頁(yè)面:
https://about.gitlab.com/product/continuous-integration/ - 源代碼:
https://gitlab.com/gitlab-org/gitlab-ce/
這部分已經(jīng)側(cè)重到運(yùn)維研發(fā)了,現(xiàn)在很多企業(yè)產(chǎn)品也有完整的解決方案(如果有人力,參考一下,開(kāi)發(fā)一款適合自己公司的也不錯(cuò))。
遇到的問(wèn)題
維護(hù)了幾天,問(wèn)題比想象中的多。
比如saltstack部署java應(yīng)用失敗無(wú)日志,相同的代碼啟動(dòng)成功腳本沒(méi)問(wèn)題,用saltstack啟動(dòng)不僅沒(méi)日志,還沒(méi)進(jìn)程。最后發(fā)現(xiàn),腳本中輸出的日志路徑是 nohup java -jar >nohup.out & ,輸出的nohup.out 不在當(dāng)前目錄下,在/root 下面(注意腳本和jar包都需要寫(xiě)絕對(duì)路徑,不要寫(xiě)相對(duì)路徑)。找的日志就能發(fā)現(xiàn)問(wèn)題了,其實(shí)之前遇到過(guò),只是這次沒(méi)日志,沒(méi)及時(shí)發(fā)現(xiàn)。
https://blog.csdn.net/Angry_Mills/article/details/112254459
安裝docker后,dns無(wú)法解析
vi /etc/docker/daemon.json增加 bip屬性, 指定容器使用的網(wǎng)絡(luò),避免由于dns解析后的ip和容器網(wǎng)絡(luò)沖突導(dǎo)致的無(wú)法解析
{"bip": "192.168.1.1/24" }jenkins 發(fā)布docker 到harbor 倉(cāng)庫(kù)
https://blog.csdn.net/Angry_Mills/article/details/114586569
總結(jié)
以上是生活随笔為你收集整理的saltstack部署java应用失败无日志——CICD 部署的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AutoCAD2015官方原版软件下载
- 下一篇: 插件书写示例