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