DevOps到底是一個什麼概念?
對於工程師來說指的是什麼?
為什麼DevOps最近這麼夯是我們在這篇所要討論的事情。
同步發表於我的部落格:http://blog.alantsai.net/2016/12/devopsSeries-whatIsDevops.html
其實DevOps是兩個英文字的縮寫,Development(開發)和Operations(運維),同時DevOps其實是一個文化和概念,並不是特定指某一個做法。
這個其實和敏捷(Agile)是一個概念,敏捷也是一個文化和概念,而其中一種流行符合Agile運作的流程就是最近也很夯的Scrum。
敏捷基本核心概念是把週期縮短,透過快速開發,透過實物提前發現問題,提前做調整,也就是Fail Fast的概念。
我很喜歡敏捷執行下來能夠帶來的一個好處
所有系統都有bug,但是當bug被修復的速度超過客戶能夠發現和反饋的時候,就不算是bug。
在DevOps來說,DevOps的核心理念是:
減少開發和運維之間的阻礙 - 讓很敏捷的開發能夠快速的上線並且整個非常流暢。
DevOps是一個相互流暢的流程 - 圖片來源:https://blog.xebialabs.com/2016/03/21/essential-devops-terms/
用白話一點來說,Dev代表著開發者,Ops代表著MIS,代表開發結果上線。
其實DevOps會夯起來和敏捷有直接關係,我們常說敏捷對專案開發有多好又多好,然後從專案管理來看如何執行,但是很少有人提到從工程師和實際開發的角度上面來說到底需要什麼才能夠支撐這種快速開發模式。
在比較嚴謹環境上過軟體的人就知道,其實要更新一個版本,要經過很多流程很關卡,當這個遇到開發速度變快的時候,常常運維和開發可能脫節造成敏捷更本跑不了。
所以我認為,要跑好敏捷,DevOps沒做起來基本上是不可能。別說Ops了,如果你的Dev都被一些瑣事浪費了時間(例如手動建制專案,手動建制Test等),那怎麼可能跑的快?
舉個例子來說,像在團隊中開發的時候,常常遇到的事情是有些人commit的時候忘記把一些程序上到版控。結果隔天另外一個工程師發現整個系統無法建制,而本來的作者因為出差或者請假所以找不到的時候
,那大家工作不都被耽誤了?這個還算小事,如果因此耽誤到debug正式系統突發性問題的時候,麻煩就大了。
結論,DevOps是技術上支撐敏捷開發可能性的環境。而要達到快,自動化是最為關鍵的地方,也是整個DevOps的核心。
DevOps既然是一個概念,所以延伸出來的實作方式其實有很多,沒有那種是對的,只有最符合團隊才是最好的。
既然DevOps是Dev + Ops一定會有針對Dev和Ops相關的做法。在這系列裡面,將會著重在Dev的部分,而Ops那段比較偏是使用工具像Puppet和Chief將不會在這個系列被提到。
既然提到了Dev,在Dev這裡基本上有幾個階段:
建制循環
這幾個階段其實又對應到了幾個不同的名詞Continous Integration、Continous Delivery和Continous Deployment。
開發人員都知道,在開發的時候,最好一小個段落就要build看看有沒有問題,越早發現問題,越容易處理。當積累了一堆問題在解決通常來說處理時間相對的短。
當一個人開發的時候都有可能會建制不成功的時候,更何況今天要一個團隊的開發。
所以同樣道理,越早把大家的code一起建制,越早發現問題,越容易解決問題。
CI講的就是這個,如何越早和越快把大家程式做建制,執行測試確保從最基本層面保證程式沒有問題。
從階段來說就是Build和Test
當程式建制沒有問題,然後測試也沒問題之後,下一個考慮的就是上線。
依照不同類型專案有不同上線方式,如果是Library專案,可能就是上nuget,所以在這個階段就是自動產生出對應的nuget package
如果是Web專案,可能就發佈成為zip或者Web Deploy package,這樣提供給運維就可以快速上線
所以CD指的是Package這個階段的動作
從階段來說就是Package
基本上這個和Continous Delivery差異在於,Continous Delivery 只產生出可用來上線的內容,但是上線或者更新還是要人為操作。
Contiouous Deployment則是連上線的部分都自動幫忙處理。舉例來說,以Library來說,自動把nuget package發佈到nuget.org。以web來說,自動發佈到IIS上面
到了這個地步,其實可以看出一條龍的服務了,開發完,一鍵整個完成上線。
從階段來說就是Deploy
希望透過這篇,大家對於DevOps常看到的詞彙和這個系列的側重點有所瞭解。整個DevOps重點就是快,而要快就要能夠重複執行,也就是達到自動化。
下篇會進入接下來會使用到的工具介紹。