1. 程式人生 > >自動釋出系統

自動釋出系統

本文僅供參考,可能仍然存在很多理解不深刻的地方
我先簡單的描述一下,釋出系統的一個發展歷程,純屬個人見解,請勿見笑
發展歷程:

  • 第一代:手動部署,上傳程式碼到伺服器,然後修改配置,啟動伺服器等等 流程都差不多了 就封裝一個shell指令碼
  • 第二代:web介面,既然都開始封裝指令碼了,是否需要有個介面,至少可以知道釋出的狀態,進度等資訊,如開源工具ControlTier(rundeck)
  • 第三代:自動部署,已經規範部署流程,可持續整合部署,更多關注業務層面,一鍵部署,操作更簡單,配置更加複雜
  • 第四代:雲部署,類似docker容器,整個程式碼、執行環境、作業系統全部打包進行拷貝部署

本文主要還是圍繞所謂的第三代進行講解,我主要用過的工具有

AnsibleLinkedin 開源框架Glu
Ansible python開發 無Agent也就是沒有客戶端的,輕量級 用起來方便
Glu 帶了客戶端的,重量級 當然功能也要強大點,自帶了控制檯

當然 我做過的兩個釋出系統都是 基於上述兩個工具 說白了 就是根據工具提供的API進行了二次封裝開發

這次封裝開發做了哪些事情?考慮的問題又有哪些了。。。請聽我慢慢道來

首先簡單談談封裝的東西:

大致的一個釋出流程是

  1. 準備工作
    運維團隊可以定製釋出腳步,配置釋出的相關細節,如灰度釋出

  2. 研發人員申請釋出
    建立釋出單 這裡最重要的就是版本號 版本的控制太多要講 下次開專題一起討論,如svn版本號,git版本號,war包版本號
    其實在這一步後面做的事情可多了,如對程式碼進行code review,編譯打包等等

  3. 測試人員審批
    個人覺得在審批這一步,QA可以先發布程式碼到測試環境,經過一輪仔細測試,然後批准釋出

  4. 部署
    一鍵式部署,點選部署按鈕這可以釋出

  5. 檢測
    這是後臺程式做的一系列檢測,如流量是否正常

  6. 回滾
    根據釋出的版本號,可以選擇性回滾到某一個版本,當然一般情況上,回滾到上一次釋出版本

其次考慮的問題:

灰度釋出:
灰度釋出是指在黑與白之間,能夠平滑過渡的一種釋出方式。AB 釋出就是一種灰度釋出方式,先對A組進行釋出,讓一部分使用者繼續用B,A組釋出完成後,一部分使用者開始用A,如果使用者對A沒有什麼反對意見,那麼逐步擴大範圍,將對B組進行釋出,把所有使用者都遷移到A上面來。灰度釋出可以保證整體系統的穩定,對使用者完全透明的升級,具備好的使用者體驗,在初始灰度的時候就可以發現、調整問題,以保證其影響度。
上面是copy過來的術語解釋,釋出系統引入灰度的概念,主要是為了提供友好的使用者體驗。同時也可以在生產環境上小測一會,這樣保證了線上環境的可靠性,這裡面我們又引入了一個概念,灰度暫停

灰度暫停:
大概意思是 假設把機器分為4組,啟用灰度暫停,則會發完一組,就好暫停後面3組釋出,當然沒有啟用,就會一組一組發完
我們當時考慮的灰度釋出,是針對每一個業務,每一個機房中灰度釋出

流量:
既然採用了灰度釋出,當然動態切除和恢復線上流量,將會是一個問題。為什麼會有流量這一說法?因為對於war包的釋出,大多數情況是需要重啟tomcat或resin伺服器的,當然php與python的部署,一般不需要。那我們是怎麼樣摘除流量的?其實就是簡單的修改nginx的upstrems配置

報警:
當時由於公司使用了zabbix監控系統,如tomcat掛了,所以我們在釋出前,事先遮蔽報警,那麼就可以幹壞事了。。。

容錯閥值:
為什麼要有這樣一個值?目前假設有100臺機器進行程式碼釋出,99臺釋出成功了,不能因為1臺機器釋出失敗,而認定此次釋出失敗,當然可以實現一些內部邏輯,去重試幾次,而有人會好奇,為什麼偏偏一臺釋出失敗,這樣子例子太多了,如硬體問題、手動上機器幹了壞事、網路波動等等原因

機房併發度:
這可能是我們國內特有的性質,一般會在多個機房部署同一套程式碼。所以我們引入了允許幾個機房同事進行釋出

機房並行度是否需要暫停:
當選擇允許暫停,則可以勾選釋出哪幾個機房,主要對於某些不穩定的版本,為了小範圍線上環境測試使用

機器併發度:
很重要的,直接影響到了釋出效率問題。這裡跟流量切換有直接的關係,這個併發度,是指灰度釋出中一組機器中,機器的並行釋出數
如100臺機器,分成4組,每組25臺,當然這裡我們配置的併發度最大為25,最小為1.假設配的是5,意思當釋出一組機器時,同時允許5臺機器釋出,配置為1就是序列釋出了,為什麼這樣做?為了保證釋出最小粒度,影響也最小,發現問題立馬回滾

通知機制:
最基本的,發郵件通知審批,釋出結束,釋出的結果等等

智慧排錯:
做到這一步就比較高上大了,簡單的說,就是在釋出的過程中,或出現各種各樣的錯誤,系統根據這些錯誤智慧解決,並進行釋出。
如某次上線,有同學上生產環境手動改了了程式碼,導致SVN釋出有衝突,系統可以自動解除conflict,然後進行釋出
在或者,部分機器程式碼釋出後,5XX狀態碼急速上升,智慧回滾的等等

智慧檢測:
怎麼樣去做好一個智慧檢測,確實是一個比較大的問題,牽涉到了系統的各方面的健康狀態?
我能想到的一些檢測工作:
1、伺服器是否啟動
2、程式碼中有檢測介面,請求該介面是否返回正常
3、版本號檢測,是否釋出正確的版本號

釋出模式:
由於公司業務決定,例舉一些我們的釋出模式,簡單講講
1、svn釋出,這種通常比較簡單直接svn更新到釋出的版本號
2、tomcat釋出,通常是war包釋出
3、resin釋出,類似tomcat
4、靜態資源釋出,zip包檔案推送解壓
5、nodejs釋出,包括了svn釋出與zip包釋出
6、git釋出,更加git的版本號釋出
7、php與python釋出 包含了svn、git、靜態資源釋出
8、定製化業務釋出

就寫到這裡了,寫多了,看不完,大家也懶得看,歡迎和大家交流

相關推薦

自己動手做自動釋出系統

文章目錄 新增加了釘釘通知 增加了釋出檢視結果,不只是通過郵件了 自己動手做自動釋出系統一 自己動手做自動釋出系統二 即將釋出。開發已經告一段落,剩下的就是專心優化一下體驗方面的東西

自動釋出系統

本文僅供參考,可能仍然存在很多理解不深刻的地方 我先簡單的描述一下,釋出系統的一個發展歷程,純屬個人見解,請勿見笑 發展歷程: 第一代:手動部署,上傳程式碼到伺服器,然後修改配置,啟動伺服器等等 流程都差不多了 就封裝一個shell指令碼 第二代:web

雲轉碼+cms一體化整合自動釋出系統

你想要一種雲轉碼切片和CMS自動釋出的系統嗎?雲轉碼+cms一體化自適應釋出系統將會滿足你所有的需求,後臺上傳視訊,自動轉碼加切片,前臺根據後臺分類配置和CMS配置自動生成完備的,針對移動端優化的線上視訊CMS系統,並且SEO優化效果極佳。這個系統就是我今天要講

在Unix系統中安裝Maven並配置Maven自動釋出java web到tomcat

前言 在Java程式開發中,包依賴管理是一件非常的無聊,瑣碎,費時費力。maven不僅可以幫助你輕鬆地管理包依賴,還可以讓你的測試,構建,部署,變得方便。你只需要在你的專案pom.xml檔案中指定你所需要依賴的軟體包,那麼Maven就會幫助你找到並下載你所須的那個軟體,以及

部落格園自動釋出/更新部落格系統

一、cnblogs_automatic_blog_uploading 部落格園上傳部落格過於麻煩,怎麼辦,自動上傳/更新部落格來一套,簡單到網頁都不需要開啟,賬號密碼都不需要輸入,懶是唯一的生產力。 基於rpcxml協議,利用githook,在commit時自動釋出本地markdown文章到部落格園,如文章已

網上答題及其自動評測系統

action text1 title rip div radi key pre selected 例 3-16 代碼 <%@page language="java" import="java.util.*" pageEncoding="UTF-8"%> <

42-自動控制系統的一般概念

復合 校正 images 例如 動態 過渡 回路 適用於 方便 1:反饋控制原理 (1) 反饋:通常,把取出輸出量送回到輸入端,並與輸入信號相比較產生偏差信號的過程,稱為反饋。 (2) 負反饋,正反饋:若反饋的信號與輸入信號相減,使產生的偏差越來越小,則稱為負反饋。反之則稱

Linux運維學習之cobbler自動安裝系統

cobbler 自動 本篇博文是使用cobbler的小工具來實現我們的系統的自動安裝,說這個工具小吧,其實它其中包含了很多的工具,當然了我們需要使用epel源來實現我們的安裝,epel的源的修改地址在/etc/yum.repos.d/下,我們可以把自己想配置的epel源或者本地倉庫的修改文件放在這下面,

kickstart自動安裝系統

kickstartr自動化安裝一.linux的啟動過程 二.kickstart的安裝過程 三.環境信息 dhcp、tftp10.10.10.2http、nfs、ftp10.10.10.2 四.配置kickstart安裝dhcp服務 systemctl stop firewalld

實戰:Cobbler 無人值守自動部署系統

cobbler pxe 無人值守背景:裝系統相信大家都不陌生,對於運維攻城獅可以說是家常便飯,老大說:小劉今天裝一下系統,明天把那幾臺機器系統重裝一下。就這樣一上午,一天就這麽過去了。耗時費力不說,重點是沒有效率,沒錯這就是我的痛點。一個好的運維工作時間清閑才說明你的工作做到位了。萬一某天說小劉把100個新機

文件系統基礎及ext文件系統創建及管理詳解、文件系統的使用及卸載、fstab文件格式及自動掛載系統

文件系統創建文件系統--分區格式化 格式化: 低級格式化: 劃分磁道 高級格式化: 創建文件系統,按照某種特定的標準,將整個分區劃分為大小相同的若幹小的邏輯編址單元,每個這樣的單元稱為塊(block)【windows中稱為簇】; 劃分塊的標準: 在Linux的文件系統中,主要的塊的劃分

cobbler自動安裝系統

yum源 exp 重新 src ror serve 系統 mark pam 一、cobbler工作流程 遠程裸機開機啟動網絡啟動,開機後會廣播給DHCP服務器,分配給遠程主機一個IP地址 拿到IP地址後,遠程主機向cobbler server發送請求OS啟動文件的請求。

金融行業投資報告自動生成系統-功能介紹

自動 自己的 實時 ffi 郵箱 數據備份 人力 管理 嚴格 【金融行業投資報告自動生成系統】是由北京博信施科技有限公司為銀行、證券、信托等金融行業量身定做的各種財務報表、數據統計等報告生成系統。通過預定義的報告模板,可以自動生成所需要的各類財務報告。實現了報告制作的流程管

CentOS 7搭建Cobbler批量自動安裝系統

楓雨1.簡介1.1Cobbler linux系統安裝服務,可以通過網絡啟動(PXE)方式快速安裝、重裝物理服務器和虛擬機,同時管理DNS、DHCP等。既可以使命令行方式管理,也可以給予web界面管理工具。同時提供API接口,可以方便二次開發使用,是較早的kickstart的升級版,比較容易配置,自帶web界

centos 7.2登錄系統自動報告系統狀態

login 系統狀態報告 shell 歡迎信息 系統:centos 7.2 #!/bin/bashcat << EOF > /etc/motd Welcome EOFLoginUser=uptime | awk ‘{print $4}‘w=w | a

centos7.2 登錄時自動報告系統狀態

內存 cpu login 狀態 為centos 7.2 用於其他系統需要更改位置變量 [root@didichuxing detection_script]# cat loginuser.sh #!/bin/bash cat << EOF > /etc/motd

自動裝機系統Cobbler

cobbler 自動安裝系統 操作系統自動化安裝部署 PXE+Kickstart工作原理 PXE+Kickstart工作流程 網卡上的pxe芯片有512字節,存放了DHCP和TFTP的客戶端 啟動計算機選擇網卡啟動,pxe上的DHCP客戶端會發出廣播包向DHCP服務器申請IP地址 DHCP服務器分

開放環境中的全自動【汽車自動駕駛系統

環境 這樣的 這不 超聲波 mode 工作態度 人類 等等 自動 【如果你在開車,不論是外界客觀環境或自己身體條件造成看不清前方路況時,你會減速及停車】,這是基本常識。以人身安全為代價來打破基本常識,這樣的設計風險太高!【Model S和Uber自動駕駛】的交通事故說明其【

機器學習與量化交易項目班 [從零搭建自動交易系統]

tid TP 項目班 ref AR 模型選擇 簡介 控制 Go 第一課 自動化交易綜述知識點1: 課程內容綜述,自動化/算法交易介紹,python在自動交易中的應用簡介第二課 量化交易系統綜述知識點1:回測,自動交易,策略建模,常見平臺使用第三課 搭建自己的量化數據庫知識點

IBOS全方位自動辦公系統介紹

業務流程 拼音 mage 現在 交流群 成功 導入 技術分享 數據 這是我見到的功能、架構最好的開源自動化辦公系統,功能與企業需求吻合度之高,架構之靈活,讓我不得不將之介紹一下,讓跟多需要學習PHP開發的朋友來了解她,擁抱她! 如果您還沒有很好的領會PHP開發