01軟件交付的問題

1. 引言

本書的核心模式是部署流水線,以持續集成理論作為其理論基石

部署流水線有三個目標

  • 讓軟件構建,部署,測試和發布過程對所有人可見,促進合作
  • 改善反饋,能在整個過程中更早的發現和解決問題(做一件事,有問題發生是一定的,重要的是快速的定位和解決問題)
  • 使在任何環境下部署和發布任意版本的應用成為自動化的過程,提高效率

一個簡單的部署流水線

提交階段 ==> 自動化驗收測試 ==> 自動化容量測試 ==> 手工測試 ==> 發布

2. 一些常見的反模式

2.1. 反模式:手工部署軟件

這個反模式一般具有如下特征

  • 有一份詳盡的操作文檔,其中描述了多出需要注意的地方(呵呵,很多地方連操作文檔都沒有啊)
  • 手工測試程序是否運行正確(懶,一不定會測,累,漏測了。。。)
  • 總有客戶來問,部署怎么又出問題了(金主生氣,就問你緊不緊張)
  • 如果是集群環境,個環境配置經常有出入(線上訪問測試庫)
  • 發布過程時間較長(人的速度哪能跟計算機比啊)
  • 發布結果無法預測(憑運氣)
  • 經常加班,還搞不定問題(惡性循環)

理想的部署流程應該是

  1. 挑選要部署的版本和環境
  2. 按一下“部署”按鈕

為什么需要部署自動化

  • 使部署過程可重復
  • 免去部署文檔的維護,一個部署腳本即是所有文檔
  • 部署過程可審計追蹤,我有日志,別抵賴,呔,哪里跑
  • 擺脫對人的過分依賴,讓傻子也能上線

2.2. 反模式:開發完成之后才向生產環境部署

經常出現的情況

  • 運維人員之前一直沒有接觸過應用程序,莫名其妙扔過來一個包,老子知道你是干嘛滴啊
  • 程序相關的配置,數據庫腳本,部署文檔等都沒有在正式環境下測試過(膽子真大)
  • 開發團隊和運維團隊協作太少(除了互相甩鍋沒啥交流)

導致的各種問題

  • 第一次部署成了噩夢(無準備之仗不好打啊)
  • 開發環境和部署環境差距越大,問題越多(絕大部分問題都是不一致導致的)
  • 各團隊之間協作焦頭爛額(可參照正規軍與烏合之眾的區別)

解決方案

將測試,部署和發布活動都納入到開發過程中,讓他們成為正常開發流程的一部分,對部署過程也進行測試(可以把部署當成一個產品來開發)

2.3. 反模式:生產環境的手工配置

這種反模式經常有如下特征

  • 誒,我本地好使啊(呵呵)
  • 集群中各節點表現不同(配置參數丟三落四)
  • 每次準備環境時間長(上廁所,到咖啡)
  • 無法回滾(要是真回滾了,估計產生更多問題)
  • 不知不覺,集群中的服務器,操作系統配置變得都不一樣了(人的腦子啊,是相當不靠譜的)

怎樣解決這些問題?

采用配置管理,可以重復的創建開發應用程序所需要的每個基礎設施

對于各個環境中的信息,都應該完全掌控,而且,所有環境的生成,配置的修改都應該由自動化程序實現,禁止手動修改(手動是萬惡之源)

2.4. 如何改變這種情況

采用部署流水線,將軟件的發布變成一種低風險、頻繁、廉價、迅速且可預見的過程

最后的目標是實現將自動化的測試和部署,以及全面的配置管理結合在一起,實現一鍵式軟件發布

3. 如何實現目標

為保證能持續的以高質量交付我們的軟件,需要頻繁的自動化發布軟件

對于頻繁的自動化發布軟件,反饋是至關重要的,對于反饋,應該達到三個標準

  • 無論什么樣的修改都應該觸發反饋流程(就像神經系統一樣,時刻監控人的動態)
  • 反饋應該盡快發出(被開水燙了,馬上知道疼)
  • 交付團隊必須接收反饋,并依據它做出行動響應(疼了你得躲啊。。。)

下面詳細介紹一下這三個標準

3.1. 無論什么樣的修改都應該觸發反饋流程

這些修改包括對以下項的修改

  1. 源代碼(持續集成)
  2. 配置信息(配置管理)
  3. 運行環境(基礎設施和環境管理)
  4. 數據(數據管理)

反饋流程

完全自動化的方式盡可能的測試每一次變更

測試內容包括但不限于

  • 創建可執行代碼的流程必須是能奏效的。這用于驗證源代碼是否符合語法
  • 軟件的單元測試必須是成功的。這可以檢查應用程序的行為是否與期望相同
  • 軟件應該滿足一定的質量標準,比如測試覆蓋率以及其他與技術相關的度量項
  • 軟件的功能驗收測試必須是成功的。這可以檢查應用是否滿足業務驗收條件,交付了所期望的業務價值
  • 軟件的非功能測試必須是成功的。這可以檢查應用程序是否滿足用戶對性能、有效性、安全性等方面的要求
  • 軟件必須通過了探索性測試,并給客戶以及部分用戶做過演示。這些通常在一個手工測試環境上完成。此時,產品負責人可能認為軟件功能還有缺失,我們自己也可能發現需要修復的缺陷,還要為其寫自動化測試來避免回歸測試

3.2. 反饋應該盡快發出

關鍵是自動化,主要通過部署流水線來實現,后面各章會詳細介紹

3.3. 交付團隊必須接收反饋,并依據它做出行動響應

沒有響應,反饋何用?

3.4. 這個流程可以推廣嗎

很多思想來源于精益制造,目標是快速交付高質量的產品,聚焦于消除浪費,減少成本

4. 收效

4.1. 授權團隊

讓整個團隊合作在一起

4.2. 較少錯誤

通過減少手工的重復任務,避免大部分錯誤

4.3. 緩解壓力

讓發布任務變得簡單可控,免得每次發布都如臨大敵

4.4. 部署的靈活性

隨時找到以往的部署版本,意見部署任意版本

4.5. 多加練習,使其完美

目標是不管部署到什么環境,都使用相同的部署方法

5. 候選發布版本

每次提交代碼都產生一個可發布版本

但是實際開發中,要想驗證一個可發布版本,就要進行一次集成,通常這個過程難以控制,所以就會推遲,集成頻率越低,越痛苦,但是越痛苦的事,越要頻繁去做,要么會更痛苦

本書會通過持續集成這一實踐來讓集成變得無痛

6. 軟件交付的原則

為了保證高質量的持續交付,下面的可以當做行為準則了

6.1. 為軟件的發布創建一個可重復且可靠的過程

歸根結底,軟件的部署包括三件事

  • 提供并管理軟件所需要的運行環境,包括硬件配置,所依賴的軟件,基礎設施以及所需的外部服務
  • 將應用程序的正確版本安裝其上
  • 配置應用程序,包括所需的任何數據和狀態

6.2. 將幾乎所有的事情自動化

能讓機器去做的就別自己做了

6.3. 把所有的東西都納入版本控制

使每個版本相關的信息都能很快找到

6.4. 提前并頻繁的做讓你感到痛苦的事

這是一條很有用的啟發式原則,更多解釋可以看看《少有人走的路》

6.5. 內建質量

每個人都對質量負責,有問題立馬解決

6.6. “DONE”意味著“已發布”

我們認為一個特性只有交到用戶手中才算DONE,而不是開發完了就OK了

6.7. 交付過程是每個成員的責任

從相互指責扯皮到共同協作

6.8. 持續改進

戴明環(plan->do->check->act)

7. 小結

本書的目標是讓發布過程變得無痛

新開了公眾號,歡迎關注,主要分享一些讀書筆記


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,885評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,312評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,993評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,667評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,410評論 6 411
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,778評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,775評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,955評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,521評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,266評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,468評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,998評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,696評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,095評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,385評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,193評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,431評論 2 378

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,819評論 18 139
  • 一 什么是持續交付 持續交付是一種開發實踐,即頻繁地將軟件的最新版本交付給測試或者用戶進行驗證,如果驗證通過,代碼...
    司鑫閱讀 1,440評論 0 0
  • 1.測試與軟件模型 軟件開發生命周期模型指的是軟件開發全過程、活動和任務的結構性框架。軟件項目的開發包括:需求、設...
    Mr希靈閱讀 21,980評論 7 278
  • 任務: 獲取三頁小獵短租房租信息,并寫入到數據庫中http://sh.xiaozhu.com/search-dua...
    浮生只言片語閱讀 326評論 0 0
  • 在這人世里, 總有許多人不辭而別。 他們曾讓我品嘗友誼的甜酒, 也曾為我讚誦愛情的芳菲。 但是,你們呵 終究會被風...
    瓶蓋閱讀 228評論 0 2