jenkins實踐篇(1)——基於分支的自動釋出
來源:藍胖子的程式設計夢
問題背景
想起初來公司時,我們還是在釋出機上直接執行釋出指令碼來執行和部署服務,並且正式環境和測試環境的指令碼都在一起,直接手動操作指令碼時存在比較大的風險就是將環境部署錯誤,並且當時指令碼部署邏輯還沒有檢測機制,服務部署起來後,還必須登入到對應機器檢視服務是否正確啟動,整個部署過程可以說是很折磨人了。於是,我開始著手改善這塊。
如何最佳化
第一,整個編譯部署過程將不再允許登入到釋出機手動執行釋出指令碼了,這樣的風險性比較大,決定採用jenkins來完成編譯和釋出的工作,這樣能讓開發者透過介面操作來進行編譯部署。
第二,之前指令碼缺少檢測機制,決定改善指令碼,首先在部署前,指令碼需要檢測對應的服務的配置檔案是否符合標準,我們的配置檔案是json格式,其次在部署完成後,檢測服務是否正常啟動,如果沒有啟動,則嘗試再次部署,直到失敗3次後將不再重試。
部署模式思考?
在決定朝著這兩個最佳化點進行最佳化後,我開始思考最終的部署模式,測試環境肯定是經常要部署和釋出的,而正式環境則不需要經常釋出,並且要謹慎釋出。
所以我考慮在測試環境做個自動釋出的功能,到程式碼合併到測試環境的分支(測試環境永遠用固定的分支名)時,會觸發jenkins的webhook機制來自動編譯和釋出到測試環境。
而對於正式環境而言,則不採用這種機制,為了保證正式環境的安全,還需要保證程式碼的快速回滾,基於此,正式環境我將採用打tag的方式進行釋出,每次釋出後會生成一個tag,回滾時則可以基於tag快速回滾。關於tag的釋出模式將在下一篇文章再展開,現在我們先來看看如何 基於分支做自動釋出。
配置webhook實現自動編譯與釋出
jenkins 安裝 Generic Webhook Trigger 外掛
在Jenkins的Manage Jenkins→Plugins→Available Plugins 中安裝Generic Webhook Trigger 外掛,再去到專案中檢視Build Triggers ,就能看到Generic Webhook Trigger選項了。
在Generic Webhook Trigger 配置頁下方有個token的配置,這個我一般配置成服務名,當配置了token後,到時候gitlab就可以透過url ”“ 來觸發編譯工作。
gitlab 推送配置
在gitlab中配置特定分支產生push事件時觸發jenkins的回撥任務,這裡假設我的測試分支名是test,以後所有測試環境的功能都需要合併到test分支進行測試,所以我在push event下面配置了test,你也可以配置成其他分支。
測試自動編譯過程
這樣,當我在test分支去進行push操作時,將會觸發jenkins 特定專案執行其pipeline,完成編譯和釋出工作。
在gitlab下方可以點選Test選定特定的事件來測試下整個自動編譯過程。
關於jenkins的釋出和編譯指令碼由於涉及到公司隱私,我這裡就不展開了,最終jenkins的pipeline 也是執行的shell指令碼去釋出機上去進行編譯和釋出。關於哪個服務需要釋出到哪臺機器上,我們是配置到了資料庫裡,然後指令碼會根據要部署的服務從資料庫中讀取要部署的機器,然後將編譯好的可執行程式透過scp傳送到對應機器,然後遠端執行ssh命令完成服務的啟動。
整個專案的釋出部署拓撲圖如下,其實也完全可以將gitlab和jenkins放到一臺機器上。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024922/viewspace-2990873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jenkins實踐篇(2)—— 自動打tag的可回滾釋出模式Jenkins模式
- Knativa 基於流量的灰度釋出和自動彈性實踐
- 基於DotNetty實現自動釋出 - 實現一鍵打包釋出Netty
- 基於Jenkins釋出微服務Jenkins微服務
- jenkins+git+.net core實現自動釋出JenkinsGit
- jenkins自動釋出java程式碼JenkinsJava
- asp.net core + jenkins 實現自動化釋出ASP.NETJenkins
- Git + Jenkins 自動化 NGINX 釋出簡易實現GitJenkinsNginx
- 基於DotNetty實現自動釋出 - 自動檢測程式碼變化Netty
- 基於 Rush 的 Monorepo 多包釋出實踐Mono
- 基於Jenkins實現php專案的自動化測試、自動打包和自動部署JenkinsPHP
- 基於vue自動化表單實踐Vue
- 基於postman的api自動化測試實踐PostmanAPI
- 前端開發:基於cypress的自動化實踐前端
- 基於 Istio 的灰度釋出架構方案實踐之路架構
- 一鍵實現自動化部署(灰度釋出)實踐
- 基於DotNetty實現自動釋出 - 專案的配置與發現Netty
- 58 趕集基於 Docker 的自動化部署實踐Docker
- 基於Jenkins Pipeline自動化部署Jenkins
- Jenkins 構建自動化 .NET Core 釋出映象Jenkins
- 使用Jenkins實現前端自動化釋出和通知,讓你的釋出只需要git pushJenkins前端Git
- 【實踐篇】基於CAS的單點登入實踐之路
- webdriver+ant+jenkins自動化測試實踐WebJenkins
- Linux_基於Tomcat自動釋出指令碼LinuxTomcat指令碼
- vue 自動化部署 jenkins 篇VueJenkins
- 基於 Pytest 框架的自動化測試開發實踐 (萬字長文入門篇)框架
- Jenkins持續整合(下)-Jenkins部署Asp.Net網站自動釋出JenkinsASP.NET網站
- Jenkins+Git+python+Pgyer Android打包釋出實踐JenkinsGitPythonAndroid
- 基於Jenkins自動化部署spring boot專案JenkinsSpring Boot
- 基於AI的移動端自動化測試框架的設計與實踐AI框架
- netcore使用 jenkins + supervisor 實現standalone下多副本自動化釋出NetCoreJenkins
- 基於 qiankun 的微前端最佳實踐(萬字長文) - 從 0 到 1 篇前端
- Jenkins+Fastlane+自動化打包釋出+蒲公英二維碼展示JenkinsAST
- mall在Linux環境下的自動化部署(基於Jenkins)LinuxJenkins
- 收藏 | Google 釋出關於機器學習工程的最佳實踐Go機器學習
- Azure 基礎:用 PowerShell 自動釋出 CloudServicesCloud
- Game AI SDK 開源釋出:基於影像的遊戲場景自動化框架GAMAI遊戲框架
- 客戶端單週發版下的多分支自動化管理與實踐客戶端