我們正在路上—從持續整合到持續釋出
持續整合作為一種很好的軟體工程實踐被很多團隊所採用,和其他一些先進的實踐一樣,它最終的目的一定是服務於產品的。產品的價值最終體現在使用者體驗的提升,而這個的前提就是產品的每一次更新能夠及時地傳遞給使用者,對於運維團隊來說就是更快地在生產環境中部署最新的產品,對於研發團隊來說就是更頻繁地釋出可以工作的軟體。
暫且拋開業界非常流行的DevOps理念,單純地從研發團隊來看,如何快速的釋出對使用者有價值的軟體是重中之重。
那結合持續整合,我們又可以做些什麼呢?
先來看看我們持續整合的現狀
獨立的環境:持續整合往往有一套獨立的測試環境,而團隊還會在其他測試環境中進行測試,兩者似乎從來沒有交集
獨立的構建:持續整合往往就是對當前最新的程式碼做一些自動化的測試,而完全忽略了軟體版本的管理,甚至不能很好的保證各種測試是否是基於同一份程式碼
輔助手段:持續整合往往作為一種測試的輔助手段,更多的是用於快速發現程式碼提交階段的錯誤
以上這些在持續整合初期完全沒有問題,而且這種方式也的確帶來了不少的價值,能夠幫助團隊更透明地瞭解產品的質量,並且快速的定位和解決問題。只是,我們可以做的更多
再來展望下持續釋出的流程
整體的思路就是以持續整合流水線作為核心,把軟體釋出的各個環節透明地展示給團隊,並且通過流水線來管理版本的釋出流程
測試環境整合:打通持續整合環境/手工測試環境/線上模擬環境,保證一條流水線上使用同一份程式碼,同一份構建物
測試流程整合:一鍵式的環境部署和一鍵式的版本管理(打TAG,拉分支,構建物的儲存等),釋出前對產品質量有清晰的瞭解
重要和主要手段:以持續釋出流水線為基準,並積極擴充其他型別的測試
把持續整合融入到產品開發和釋出階段,而不是簡單地搭建一套“自動化執行任務”,並充分利用構建流水線實現流程和質量的雙重把控
最後來看下某個產品初步定義的持續釋出的流程
產品現狀
三套環境:持續整合環境(雲主機),手工測試環境(雲主機),線上模擬環境(物理機)
持續整合狀態
自動化的編譯,打包,部署,冒煙測試和快速效能測試已經實現自動化並實時通過程式碼提交觸發,全程20分鐘左右
單元測試和靜態程式碼檢查還在完善中,也實時通過程式碼提交觸發,不過沒有列入關鍵點,也就是成功與失敗並不直接影響構建流程
新功能測試在手工測試環境下進行
上線前需要線上上模擬環境進行效能測試和穩定性測試
持續釋出流水線
持續整合環境實時保證當前的提交沒有破壞基本功能
通過手工觸發(QA人員控制),一鍵部署產品到手工測試環境並能在流水線上展示手工測試結果(通過簡單的設定一個變數達到效果);同時可以選擇觸發功能測試,達到同步的執行
如果QA人員認為當前測試版本可以達到內部發布要求,可以一鍵打TAG,並生成和儲存dist包
通過手工觸發(QA人員控制),一鍵部署dist包到模擬線上環境,而後自動化進行效能測試和穩定性測試
理想狀態這步應該是自動觸發,由於目前機器的不可獨佔性,暫時只能手工觸發
自動化的效能測試和穩定性測試還是實施中
最終版本的對外發布也是通過手工觸發(QA人員控制)
以上的流程是根據專案/產品的需求和現狀制定的,只是一些思路可以借鑑,具體的實施一定要結合實際情況,因地制宜的開展
Jenkins持續釋出流水線
幾個Jenkins持續釋出流水線配置小Tips
通過BuildNameSetterPlugin顯示當次流水線構建的版本(SVN revision或是Git revision)
通過ParameterizedTriggerPlugin自動觸發下游任務,並把構建版本資訊傳遞下去
通過CopyArtifactPlugin用於構建物的部署
通過BuildPipelinePlugin手工觸發某些任務,用於需要人工介入的階段
最新內容請見作者的GitHub頁:http://qaseven.github.io/
相關文章
- 從持續整合到持續交付——DockerCloud概覽DockerCloud
- 持續整合、持續部署、持續交付、持續釋出
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- 持續整合、持續交付、持續部署簡介
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- #AWS:為什麼我們要持續投資Rust?Rust
- 從“持續驗證”到“持續保護”, 騰訊牽頭全球首個零信任國際標準釋出
- 談談持續整合,持續交付,持續部署之間的區別
- 使用 Github Actions 持續釋出 Flutter 應用GithubFlutter
- Cruise:持續整合及釋出管理系統UI
- HTTP非持續連線和持續連線HTTP
- 釋出 Spinnaker 1.0:持續的雲交付平臺
- vue + webpack 前端專案持續釋出整合部署VueWeb前端
- 持續整合伺服器-luntbuild1.1釋出伺服器UI
- 通過Docker容器執行持續整合/持續部署Docker
- JVM(持續更新。。。)JVM
- FastApi持續更新ASTAPI
- iOS 持續整合iOS
- 持續學習
- Jenkins持續部署-Windows環境持續部署探究1JenkinsWindows
- 使用流水線外掛實現持續整合、持續部署
- 持續整合、持續交付和持續部署有什麼區別?0基礎學習linux技能Linux
- SAP開源的持續整合-持續交付的解決方案
- 持續記函式函式
- 整合持續整合工具
- 聊聊持續測試
- lambda(持續補充)
- Jenkins持續整合Jenkins
- Blender 雕刻 持續更新
- 程式設計師要有持續產出程式設計師
- 領導讓我搞持續整合------流程圖流程圖
- 禾木之變:2021我們該如何持續擁抱AI?AI
- IIS釋出站點錯誤收集(持續更新)
- k8s-jenkins持續釋出tomcat專案K8SJenkinsTomcat
- 持續最佳化,欣欣向雲 | RocketMQ Operator 0.3.0 正式釋出MQ
- TensorFlow 官方文件中文版釋出啦(持續維護)
- 以 egg.js 為例的持續整合(CI)、持續部署(CD)JS