走向“持續部署”

發表于:2014-05-26來源:博客園作者:橋梁點擊數: 標簽:持續集成
目前IT行業中,似乎“要不要做持續集成?”已經不再是討論的焦點,取而代之的是“如何進行持續集成?”。在前一篇文章中,我介紹了Cruise團隊持續集成的演進過程。在最后,還曾提

  目前IT行業中,似乎“要不要做持續集成?”已經不再是討論的焦點,取而代之的是“如何進行持續集成?”。在前一篇文章中,我介紹了Cruise團隊持續集成的演進過程。在最后,還曾提及Cruise團隊的持續部署。本文將結合團隊的實際情況,與大家分享持續部署的實踐心得。

  “最后一哩”問題

  持續集成解決了軟件開發中的部分問題,但還有更為重要的一部分有待解決,即“通過什么樣的方法,可以讓軟件盡快地在真正的生產環境下運行,從而實現軟件的價值”。在軟件開發過程中,“從功能開發完成開始直到將其部署至生產環境中正式運行”這一階段被稱為“最后一哩”。如果從一開始就對產品發布足夠重視的話,那么這“最后一哩”可能只需要幾分鐘,甚至幾秒鐘就完成了。然而,事實上大多數項目在這一階段會花上幾個星期,更有甚者可能會是幾個月。

  為什么會這樣呢?對于復雜軟件來說,無論什么環境中的部署(測試環境,試運行環境,還是生產)都很困難。當軟件第一次被部署到非開發環境去測試,或者當軟件功能及其環境有較大變化時,通常都會暴露出很多問題。而在做用戶驗收測試時,常常會發現更多的問題,例如不能滿足非功能需求,用戶操作不方便,功能與用 戶真正需要的東西相差太遠等等。而開發團隊只有修復這些缺陷后,才能再次部署測試。于是,這個過程會不斷反復,直至該軟件足夠穩定,才可以部署到生產環境中。

  即然部署到測試環境都這么困難,那么在生產環境中部署的風險豈不會更大嗎?而且,更為嚴重的是:當生產環境部署出現問題時,擺在你面前的選擇就所剩無幾啦(通常是回滾到以前的狀態,而“回滾”這段時間的停機成本是相當高的)。

  上述原因就會導致大多數組織對產品的發布采用“保守策略”,即降低軟件的發布頻率,這也導致兩次發布之間的版本特性差異相對較大。這樣一來,發布風險并未因發布間隔時間加長而降低,反而更高了。當各方面的因素結合在一起時,軟件發布這一環節就變得昂貴而又緩慢啦。而通常“發布過程與頻率”決定了產品在市場中的位置。

  那么,如何更好地解決“最后一哩”這一問題呢?實現持續部署! 即將持續集成實踐擴展到整個軟件生命周期頻繁且規律性地自動構建代碼并將其部署到測試環境中,然后通過一系列的測試,選擇適當的版本部署到預演環境中試運行,最后選擇穩定的版本部署到生產環境中,從而使開發團隊盡早從最終客戶那里得到反饋,而最終客戶盡早得到軟件的價值。

  “持續部署”源于部署時的痛苦

  在使用Cruise來構建Cruise本身以后的第二周后,當我們想再次升級它時,因沒有事先考慮好升級方式,結果用了兩人天才把它搞定。從那以后,我們就開始了Cruise的持續部署之旅。

  持續部署環境

  目前Cruise的研發環境中,有一個被稱為“UAT(User Acceptance Testing)”的測試環境,目前它由一臺Cruise Server和近20臺Agent組成,用于Cruise團隊自身的持續集成與部署管理。還有另一個被稱為“Production”的預發布生產環境,它由一臺Cruise Server和近70臺Agent組成,由多個項目組同時使用。“Production”環境是真實的生產環境,部署失敗,就意味著損失。因此,雖然部署工作可以通過自動化腳本完成,但我們還是在“UAT”和“Production”兩個Stage之前加上了人工開關(manual approval),如下圖所示。前三個Stage全部是自動觸發,其后全部為手工觸發。每個待發布的版本都會先被部署到UAT環境中,實際上也就做了試 運行,如果該版本穩定,則部署到“Production”環境中。這樣就使部署風險盡在掌控之中。

  讓持續部署成功的要點

  1. 充分而廣泛的自動化測試覆蓋

  目前我們的測試包括單元測試、End2End測試、功能測試性能測試。其中單元測試、End2End測試及功能測試都在同一個 Pipeline中,每次代碼提交都會運行這些測試。而性能測試在另一個Pipeline中,用于每次部署后,收集UAT環境和Production環境的性能指標。由于部署頻率足夠,我們可以掌握性能數據的微小變化,據此來采取相應的優化措施。

  寫單元測試已經成為不爭的事實,自不必說。另外,由于Cruise與很多版本管理軟件打交道,這里所說的End2End測試是指與這些外部接口的測試。而功能測試是指將Cruise Server和Agent真正在測試機器上運行起來后,再運行TWIST自動化測試套件。我們對功能測試的原則就是每個Story都要有功能測試覆蓋,QA與開發人員共用編寫功能測試用例,由開發人員實現之,而且功能測試要讓真實的Cruise Server和Agent進行通信的基礎上進行。TWIST是我們公司的另一款產品,用于自動化功能測試,其測試編輯界面如下所示:

原文轉自:http://kb.cnblogs.com/page/157115/

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97