logo头像

Edward.K Thinking

(學習DevOps系列 5) DevOps的持續整合與佈署

說到持續整合部分,大家因該就不陌生,CI就是指的這一塊,不過,在討論到Build這件事情上,我們可以把這行為分成兩種,一種是在自己電腦用VS去建置,另一種就是透過工具做自動化Build。一般來說如果只是做單純的Build和單元測試這些事情,可能會認為在我自己電腦上Build就好,何必再花時間去做自動化建置,因為我自己建置完後,也可以直接佈署。似乎很美好,但是,若是採用自動化建置,可以建置更多流程的動作,同時,也可以確保建置系統,不會只有你自己的電腦才可以行為

自動化建置


這兩者差異點如下,不過,所有情況還是必須依照團隊或是組織情況決定,但最終想要能持續交付價值給用戶,自動化建置還是必須的

  • 本機建置:一般會是在我們Check In程式碼前,所需要檢查的工作,可以透過IDE工具確認是否所有程式碼都是可以被編譯的,這其中也會包含一些單元測試。不過,盡量不可以用這樣的編譯結果作為發布的依據。但是,在Check In之前是必須要做這樣動作,確保所有程式碼是基本上是可以被編譯與執行
  • 自動化建置: 透過自動化建置,除了我們可以編譯、測試與封裝外,也可以針對要目標環境進行整合,當然,包含了程式運行中所有相依環境的建置與關聯。最後發布結果是與運行環境是相同的。使用自動化建置相對來說會是比較穩定的作法

通常在講DevOps的書籍或是技術上,除了很少講到文化改革外,大部分一定都會提到自動化建置持續集成兩塊,主要在於自動化建置本身具有其價值存在,不單單只是把編譯和佈署自動化而已

  • 可以驗證程式碼不一定只會在我電腦上成功運行
  • 可以根據眾多項目的需求,像是Script、Test、封裝和其他內容的需求去執行它
  • 佈署到某一個資料夾或是網路資料夾
  • 能針對佈署細節、刪除細節和關聯的工作項目進行維護和檢核歷史紀錄

在DevOps中,CI只是自動化建置的一部分,CI 主要是將所有在同一個專案上的開發人員的開發Branch合併到共用程式碼主幹上的一種作法,並透過自動編譯和測試,自動去驗證每一次得整合。事實上,CI也會被定義在每次程式碼被Check In去執行單元測試。而做CI會有甚麼好處?大概有這幾項

  • 快速回饋,提升程式碼品質
  • 當程式碼新增或是修改,自動觸發測試
  • 有效的管理技術債和進行程式碼分析
  • 減少一些困難或是誘發性的錯誤代碼合併
  • 提高上線之前,對於程式碼的信心度
  • 減少時間浪費

當我們開始使用自動化建置和持續整合時候,必須去優化CI的速度,讓程式碼從一個開發人員快速導向另一個開發人員,或是能快速得到測試失敗結果,換句話說就是必須讓整個流程是快速且可以讓其他開發人員也能順利接手下去。如果像是要執行一個安全性程式碼掃描,就不太適合去做CI的建置。可能就只能算是定期的自動化流程而已。另外,如果佈署方面,建議每次發布後可以保留版本,以備不時之需。


自動化建置,是整個DevOps過程中的重要成分之一,優化後的自動化佈署,才有辦法讓反饋能更迅速,所以,流程上也因該不斷的優化和提升穩定性

自動化佈署的價值


談完自動化建置後,在來談自動化佈署,很多企業或團隊在佈署上依舊認為手動佈署是較好的,無論從建置到佈署,都是用手動方式進行,或是自動化建置,然後手動佈署。常常發生情境就是當建置完成後,使用一個人或是團隊透過複製貼上、手動更改設定檔(無論是環境或是應用程式)以及對於DB、API連線用手動更改後複製到開發或是正式環境上。通常這樣情況下,是很容易發生錯誤的。有可能在佈署時候,沒有正確把相依性關係元件佈署,甚至可能佈署過程中發生損壞以及其他問題。而透過自動化佈署,可以一次同時佈署到多個環境上。也可以透過手動審核方式去設置某些目標環境且自動化佈署還可以實現可預測性和效率。在DevOps中提到Release Pipline通常是指從開發到生產環境的佈署流程


說到自動化佈署,就必須談到持續交付這部分。持續交付本身是一項軟體工程方法,主要在於讓團隊在短周期內產生軟體,並確保軟體能夠在任何時間都可靠的發布。目的在於要能很快很頻繁的建構、測試和發布。這樣方式是讓系統發布到正式環境上,利用增量更新的方式,來降低有變更的交付,帶來的成本、風險和時間。事實上透過自動化Release Pipline做到持續交付過程中,尤其對於正式環境來說,一般還是會有設定一位或幾位人員進行審核

怎樣做到持續交付

  • 建議開始使用Infrastructure as Code and configuration as code
  • 整個Pipline中啟用自動化測試
  • 提供透明和快速回饋週期
  • 讓佈署到正式環境是一項”低壓力”的行為

在開始安裝佈署代理程式之前,先退一步查看,該應用程式是如何部署到不同環境的流程。


確定一個對於現有情境的有效方案或流程,這其中包括每個環境所有需要的任務、流程審核和機器都是在團隊中公開與透明。

上一篇