今天簡單聊個概念,這些概念也會影響之後我們 .gitlab-ci.yml
該怎麼實作。
其實,乍看「整合」、「交付」、「部署」、「釋出」這幾個字的中文,可能還沒有很直觀理解是什麼,但若是說 Integration、Delivery、Deployment、Release 大家在工作上可能就常聽到了。Integration 可能還好,但是或許對多數人還說 Delivery、Deployment、Release 這三個詞是等價的,事實上並非如此。那究竟這三者差異是什麼呢?就讓我逐個探討吧?
在軟體開發完一個功能到使用者能使用他,其實中間還有許多事情要做。其中最大宗的就是測試,測試涵蓋的範圍很廣,從我們常聽到的單元測試、整合測試外,還包括測試程式能不能用的冒煙測試(最簡單就是至少要能建置)、驗收測試等。甚至我認為程式碼風格檢驗、靜態程式碼分析都可以算在其中。而將這些檢驗程序將程式碼變動整合到主線上的過程,就是整合,而持續整合最重要的因素就是將這些流程都自動化。
當程式碼通過持續整合的流程後,理論上就會產出一個隨時可以用的軟體,這個軟體只要客戶要求,隨時可以被使用。而這個可用的軟體也可能因為商業考量,不會即時對外開放,這樣的狀態就叫做交付。也就是軟體已經交付給客戶了,剩下的部分就是等客戶的考量了。
如果這個軟體是會被放在伺服器使用的,那將這個可用的軟體推送到伺服器的動作就是所謂的部署,但是部署不一定代表新寫好的這個功能是可以被使用者用到的,可能還可以有個後台去操作是否可以開放,而讓使用者可以享受到最新的變動,就是釋出。所以部署和釋出是不太一樣,我部署上去後不一定代表釋出。