要聊專案維護性,就不得不提一下 DevOps 的觀念了,雖然身為前端工程師的我們通常不會是公司 DevOps 的主導人,但這不代表我們沒有相對應的責任。
先來看一下維基百科上面對 DevOps 的定義吧:
DevOps(Development和Operations的組合詞)是一種重視「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化、運動或慣例。通過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。
可以把 DevOps 看作開發(軟體工程)、技術運營和品質保障(QA)三者的交集。
由 Devops.png: Rajiv.Pantderivative work: Wylve - 本檔案衍生自: Devops.png:, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=20202905by: 維基百科 DevOps
在 DevOps「開發」、「測試」、「維運」的三個要素中,我們身為 Developer 當然開發就會是我們比重最大的面向,不過測試與維運的參與其實也有其必要性。
先從測試開始說起,不論團隊的組成中是否有 QA 的這個角色,專案中的對程式碼的測試都是不能忽略的環節,而測試涵蓋的範圍不只包含了前面提到的 ESLint、TypeScript 的靜態檢查,還有後面會延伸說明的 Unit test、E2E test 等等。
而維運的部分應該就容易理解多了,我們前端不一定需要熟悉所有的服務架構,但最少總要讓辛苦完成的專案成功部署吧?設定好部署所需的設定、腳本、環境變數、錯誤攔截機制 (出 Bug 的時候能快速確定要摸摸自己的鼻子還是甩鍋) ,讓專案能好好的在線上運行就是我們的任務了。
CI/CD 就是幫助我們把這些事情自動化的工具。
CI/CD stands for Continuous Integration (CI) and Continuous Deployment or Continuous Delivery (CD).
CI/CD 通常指的是持續集成和持續交付或持續部署的組合實踐。
光看這段引用是不是有點黑人問號呢?
其實簡單來說,就是將程式發布的流程自動化,自動編譯、測試、部署......等等,把重複性操作轉為自動化執行。
如果對 CI/CD 這個議題有興趣,我推薦可以去看一本小說,叫做:「鳳凰專案:看IT部門如何讓公司從谷底翻身的傳奇故事」。看完本書就知道什麼是 CI/CD 了,今天就介紹到這邊,我們下次見。
這本小說非常好看易讀,但書中的案例卻都是在真實環境中很常見的各種災難,閱讀此書不會讓你馬上就知道如何建構屬於你的 CI/CD 模式,但可以讓你知道 CI/CD 的重要性與大致上的概念。
上面提到的自動編譯、測試、部署,其中自動編譯與測試的部分就是包含在 CI 階段進行的,通常會提供一個統一、一次性的編譯與測試環境,透過預先設定好的容器與預先寫好的腳本來進行 CI 的流程。
CI 可以將人工操作的比例盡可能的降低,畢竟人工操作不但累人,可靠性上面還掛有一個大大的問號。
而統一環境也是非常重要的環節,因為透過統一的編譯與測試環境,才能有效避免 Dev 環境與 Production 環境之間的落差造成不可預期的 BUG。
而 CD 的概念就相對單純一些了,在每次 CI 完成編譯、測試的流程後自動將最新的程式版本部署到伺服器上提供服務,這就是 CD 的概念。
而 CD 的架構通常也包含了服務可靠性的確保,在部署失敗或是服務異常等等的狀況發生時,系統會利用各種方式來通知維運人員進行處理,維運人員也可以在最短的時間內採取必要的行動,像是遇到重大 BUG 時可以快速回退到之前的穩定版本,避免損害擴大。