Continue Integration and Continue Delivery

(只提供繁体中文版本)

CICD – Blog by John Chang

Continue Integration and Continue Delivery

CI/CD跟DevOps其實是密不可分的,CI想解決的問題是,傳統的開發模式,每個開發者都是在自己的電腦上架設開發環境,等完成一個段落後才commit到verison control server上,例如Git。

通常不會有人在自己的部分開發完成之後,就先去看別人的程式,是否能跟自己的整合起來,所以在最後的整合階段時期,就會發生一大堆無法預期的問題,這個時候複雜度通常非常高,要解決事件很麻煩且耗時的工作。

所以CI或是CD的觀點就是,如果一件事很麻煩很複雜,那就拆成很多小事,然後每天做,甚至一天做好幾次,持續整合就是這個意思,當每次有新的程式碼上傳到version control server時候,就馬上整合,看是否跟別人的程式碼有問題。不管是小到多小的程式碼都必須這樣做,當然這樣複雜度就會降低很多。這就是CI的重要理念。

至於CI/CD的實作,就是以pipeline為概念,從code commit到version control開始,到真正deploy到production的中間流程。pipeline有四個phase: commit, automated acceptance, manual test跟release。前兩個phase就是CI,四個phase全包就是CD。pipeline的想法是,把所有能夠自動化的東西統統自動化,真的不行再去手動做,所以還是有一個手動測試的phase。基本的要求是unit test跟functional test的自動化測試coverage都要有80%以上。這麼一來所有人的新code都能隨時跑這些自動化測試,確定自己的code跟大系統整合起來是沒問題的。也因為大量自動化,所以從code commit到最終deploy只需按一個按鈕就搞定,而且在一兩小時內搞定。

一個CI/CD很重要的指標在於,一行新的code從commit到使用者實際看到要花多少時間。傳統的方式可能是幾星期甚至更久,但CI/CD是幾小時。除了自動化以外,CI的重點是圍繞在自動化pipeline建立一套流程跟紀律,並且搭配新的文化和想法。舊的方法是build永遠都是處於紅燈(fail)狀態,直到最後要release才會變綠燈。CI要求build永遠是綠燈,只要任何新code讓它變成紅燈,所有人要停下手邊的工作,馬上去修正它。

Posted in ICG日志.