1. 程式人生 > >持續集成與devops

持續集成與devops

敏捷開發 elk stack tst 管理 分布 監視 pup 不斷學習 docker

持續集成

持續集成(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》的介紹圖:…

技術分享圖片

敏捷管理:一支訓練有素的敏捷開發團隊是成功實施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資源的更改

持續集成與devops