經過了將近兩周的時間,我們將 ColorCodeTag 從構想一步步的實踐,到昨天,已經能夠在開發者的電腦上運行了,接著,我們只需要將程式碼運行在一台電腦上,並且讓其他人能夠透過網路連線訪問,一項網路服務也就算成功的部署了。
不過,既然本次的主題是 DevOps,那肯定沒這麼簡單,在我們進入 Ops 篇章之前,我想先和大家聊聊兩個項目,分別是: Git 和 運行環境。
Git,是一種版本控制系統,更準確地來說,是一種分散式版本的控制系統
Git 就像是時光機、像是蝴蝶效應裡面男主角寫的日記一樣,能夠記錄某個時間點的快照,並隨著時間保留程式的差異並記錄,讓我們能隨時切換到特定時間點的版本。且 Git 是開源的,開源意味著免費,並有多種支援的 GUI (如 SourceTree, GitHub Desktop),讓新人容易上手(也容易搞砸,特別是 GUI 用久了,會不了解後面究竟發生了什麼事情)。
在 Git 中,由 Git 所控制的專案,我們將其稱為 Git Repository,而 GitHub/GitLab 便是可以儲存並控制 Repository 的雲端伺服器,藉由共享在雲端 (公有或私有雲) 的 Repository,我們便能達到多人協作一份專案。
當多人協作開發時,Git 的幾項優點變隨之展露:
當程式碼的開發完成到可交付的階段後,我們會讓這些程式運行在一台電腦上,而將程式碼移動(不論是手動或自動)到可運行的環境上 (一台灌有某個執行系統的電腦) 並執行的動作,就被我們稱之為部署。(像我這次鐵人賽的 Title 就是沒注意到打錯字,結果開賽後改不了...)
然而,當我們完成了程式碼的部署,在真正開放網站給用戶前,還需要進行一系列的測試,來確用戶能夠在操作時獲得最佳的使用者體驗。測試項目包含以腳本形式錄製並執行用戶所有操作的整合測試、對於系統附載程度的壓力測試 (Ex: 模擬雙 11 購物節瞬間收到大量請求)等。
想像一下,我們將代表學校參加作文比賽,將文章寫完後先交給父母檢查,父母看完沒問題後再交給學校老師,老師也點頭後,才代表學校將文章送出去;同樣的,在交付產品給用戶之前,我們一定會完成所有的測試,再交給客戶,而客戶也會親自測試一遍後,才開放讓其他的人來使用;因此,在完成程式碼的開發後,這些程式碼其實會逐次的被送往不同的機器上、給不同的人、做不同形式的測試;而常見的環境以其目的性質又可以分為以下幾個:
這樣看來,撇除開發者自己的電腦外,程式碼還會經過 2 ~ 3 台實體電腦,有的時候公司或是客戶會採用雲端租賃與託管的方式,在 AWS、GCP、Azure 上租用虛擬機作為上述的環境。
後續的章節中,我們會講解伺服器與 Linux 作業系統的基礎知識,以及幾個重要的指令,來幫助我們完成部署的手續。
在 DevOps 的環節中,Git 分支能夠生成 Webhook,達到當 GitHub/GitLab 偵測到有新的 commit or push 時,會觸發 CI 的工具(如 Jenkins),讓 CI 工具能主動將 Repository 內的 SourceCode 同步,並執行打包、測試等手續。
而剛才也提到,在服務正式開放給用戶使用之前,會先經歷不同的環境測試,也因此,Git 甚至能藉由不同的分支,來觸發不同的 Pipeline 流程,將程式碼整合並部署到對應的運行環境中。
今天,我們介紹了 Git 和個執行環境,以及他們倆者之間可能的互動模式,這裡我決定先帶大家完成手動的部署後,再來與各位介紹 Gitflow 的實作,並直接與 Jenkins 互動,明天我們將介紹 Linux 與伺服器,與常用的指令。