1. 程式人生 > >持續整合與devops

持續整合與devops

持續整合

    持續整合(Continuous integration,簡稱C1),簡單的說持續整合就是頻緊地(一天多次)將程式碼整合到主幹,它的好處主要有兩個:1、快速發現錯誤。每完成一次更新,就整合到主幹,可以快速發現錯誤,定位錯誤也比較容易。2、防止分支大幅偏離主幹。如果不是經常整合,主幹又在不斷更新,會導致以後整合的難度變大,甚至難以整合。持續整合的目的,就是讓產品可以快速迭代,同時還能保持高質量。。

持續交付

    持續交付(Cortinuous delivery)指的是,頻繁地將軟體的新版本,交付給質量團隊或者使用者,以供評審。如果評審通過,程式碼就進入生產階段。

持續交付可以看作持續整合的下一步。它強調的是,不管怎麼更新,軟體是隨時隨快可以交付的。

持續部署

    持續部署(continuous deployment)是持續交付的下一步,指的是程式碼通過評審以後,自動部署到生產環境。持續部署的目標是,程式碼在任何時刻都是可部署的,可以進入生產階段。持續部署的前提是能自動化完成測試、構建、部署等步驟。.

注:持續交付不等於持續整合

持續整合的一般流程

根據持續整合的設計,程式碼從提交到生產,整個過程有以下幾步:

1、提交:流程的第一步是開發者向程式碼倉庫提交程式碼。所有後面的步驟都始於原生代碼的一次提交(commit)。

2、測試(第一輪):程式碼倉庫對commit操作配置了鉤子(hook),只要提交程式碼或者合併進主幹,就會跑自動化測試。

3、構建:通過第一輪測試,程式碼就可以合併進主幹,就算可以交付了…

    交付後,就先進行構建(build),再進入第二輪測試。所謂構建,指的是將原始碼轉換為可以執行的實際程式碼,比如安裝依賴,配置各種資源(樣式表、J5指令碼、圖片)等等。

常用的構建工具如下。jeknins、Travis、codeship等。

4、測試(第二輪)

    構建完成,就要進行第二輪測試。如果第一輪已經涵蓋了所有測試內容,第二輪可以省略,當然,這時構建步驟也要移到第一輪測試前面。第二輪是全面測試,單元測試和整合測試都會跑,有條件的話,也要做端對端測試.所有測試以自動化為主,少數無法自動化的測試用例,就要工跑。…

5、部署

    通過了第二輪測試,當前程式碼就是一個可以直接部署的版本(artifact)。將這個版本的所有檔案打包(tarfilename.tar”)存檔,發到生產伺服器。

生產伺服器將打包檔案,解包成本地的一個目錄,再將執行路徑的符號連結(symlink)指向目錄

認識 DevOps

DevOps是什麼

    DevOps一詞的來自於Development和Operations的組合,突出重視軟體開發人員和運維人員的溝通合作,通過自動化流程來使得軟體構建、測試、釋出更加快捷、頻繁和可靠。

    目前對DevOps有太多的說法和定義,不過它們都有一個共同的思想:“解決開發者與運維者之間曾經不可逾越的鴻溝,增強開發者與運維者之間的溝通和交流”。而我個人認為,DevOps可以用一個公式表達:文化觀念的改變+自動化工具=不斷適應快速變化的市場。

強調:DevOps是一個框架,是一種方法論,並不是一套工具,他包括一系列的基本原則和實踐。,其核心價值在於以下兩點:。

更快速地交付,響應市場的變化。

更多地關注業務的改進與提升。為什麼需要DevOps?

1、產品選代

    在現實工作中,往往都是使用者不知道自己想要什麼,但是當我們設計完一個產品後,他後告訴我們他們不需要什麼,這樣我們的產品需要反覆的選代,而且過程可能是曲折的,那我們有什麼好的辦法快速的交付價值,靈活的響應變化呢?答案就是Devops。因為Devops是面向業務目標,助力業務成功的最佳實踐。

2、技術革新

    現在的IT技術架構隨著系統的複雜化不斷的革新,從最期的所有服務在一個系統中,發展到現在的斂服務架構、從純手動操作到全自動流程、從單臺物理機到雲平臺

DevOps如何落地

落實DevOps的指導思想:

高效的協作和溝通、自動化流程和工具、迅速敏捷的開發、持續交付和部署、不斷學習和創新。

我們來看一張來自devops 經典著作《success with enterprise dev-ops whitepaper》的介紹圖:…

5126dfe8-27ee-41cd-a1c2-53f5d098acfb

敏捷管理:一支訓練有素的敏捷開發團隊是成功實施DevOps的關鍵。

持續交付部署:實現應用程式的自動化構建、部署、測試和釋出。

通過技術工具,把傳統的手工操作轉變為自動化流程,這不僅有利於提高產品開發、運維部

置的效率,還將減少人為因素引起的失誤和事故,提早發現問題並及時地解決問題

DepOps在落地實施過程中經常會遇到的問題

人手緊缺

跨部門協作,前期溝通培訓成本高

前期投入工作量大見效少。

DevOps技術棧

敏捷管理工具

  Trellor、Teambition、Worktile、Tower

產品&質量管理。

  confluence、禪道、Jira、Bugzila.

  其中confluence和禪道主要是產品的需求、定義、依賴和推廣等的全面管理工具;而Jira和Bugzila是產品的質量管理和監控能力,包括測試用例、缺陷跟蹤和質量監控等。目前我們使用Jira和禪道較多。

程式碼倉庫管理

Git、Gitlab、Github

    Git是一個開源的分散式版本控制系統;Gitlab和Github是用於倉庫管理系統的開源專案,它們使用Git作為程式碼管理工具,並在此基礎上搭建起來的web服務。我們主要使用的是Git和Gitlab。

自動化構建指令碼

    Gradle、Maven、SBT、ANT

慮擬機與容器化

    VMware、VirtualBox、Vagrant、Docker

持續整合(C1)&持續部署(CD)

    Jenkins、Hudson、Travis CI、Circle CI

  Jenkins是一個開源軟體專案,是基於Java開發的一種持續整合工具,用於監控持續重複的工作,日在提供一個開放易用的軟體平臺,使軟體的持續整合變成可能,它的前身為Hudson。Travis CI是目前新興的開源持續整合構建專案,它與jenkins很明顯的區別在於採用yaml格式,簡潔清新獨樹一幟。

  Circle CI是一個為web應用開發者提供服務的持續整合平臺,主要為開發團隊提供測試,持續整合,以及程式碼部署等服務。

自動化測試

Appium

  Appium是一個移動端的自動化框架,可用於測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。可用於105和Android以及firefox的作業系統。

Selenium

  Selenium測試直接在瀏覽器中執行,就像真實使用者所做的一樣。Selenium測試可以在Windows、Linux和Macintosh 上的Internet Explorer、Mozilla和Firefox中執行。

Mock測試

  Mock測試就是在測試過程中,對於某些不容易構造或者不容易獲取的物件,用一個虛擬的物件來建立以便測試的測試方法。這個虛擬的物件就是Mock物件,Mock物件就是真實物件在除錯期間的代替品。Java中的Mock框架常用的有EasyMock和Mockito等.

消費者驅動契約測試

  契約測試是一種針對外部服務的介面進行的測試,它能夠驗證服務是否滿足消費方期待的契約。當一些消費方通過介面使用某個元件的提供的行為時,它們之間就產生了契約。這個契約包含了對輸入和輸出的資料結構的期望,效能以及併發性。而PACT是目前比較流的消費者驅動契約測試框架。

自動化運維工具

Ansible、Puppet、Chef、Saltstack

監控管理工具

Zabbixe

  Zabbix是一個基於WEB介面的提供分有式系統監視以及網路監視功能的企業級開源解決方案。

ELKStack日誌分析系統。

  ELK Stack是開源日誌處理平臺解決方案,背後的商業公司是Eastic。它由日誌採集解析工具Logstash、基於Lucene的全文搜尋引擎Elasticsearch、分析視覺化平臺Kibana三部分組成。

雲監控(如Amazon CloudWatch)

  Amazon CloudWatch 是一項針對AWS雲資源和在AWS上執行的應用程式進行監控的服務。您可以使用Amazon CloudWatch收集和跟蹤各項指標、收集和監控日誌檔案、設定警報以及自動應對AWS資源的更改