iT邦幫忙

2022 iThome 鐵人賽

DAY 14
0
DevOps

一個人也能 DevOps ? 用 Angular + Spring Boot 演示專案由開發到部署系列 第 14

Day14: Dev 我都懂,那 Ops 呢? Git & 運行環境介紹

  • 分享至 

  • xImage
  •  

經過了將近兩周的時間,我們將 ColorCodeTag 從構想一步步的實踐,到昨天,已經能夠在開發者的電腦上運行了,接著,我們只需要將程式碼運行在一台電腦上,並且讓其他人能夠透過網路連線訪問,一項網路服務也就算成功的部署了。

不過,既然本次的主題是 DevOps,那肯定沒這麼簡單,在我們進入 Ops 篇章之前,我想先和大家聊聊兩個項目,分別是: Git運行環境

Git

Git,是一種版本控制系統,更準確地來說,是一種分散式版本的控制系統

Git 就像是時光機、像是蝴蝶效應裡面男主角寫的日記一樣,能夠記錄某個時間點的快照,並隨著時間保留程式的差異並記錄,讓我們能隨時切換到特定時間點的版本。且 Git 是開源的,開源意味著免費,並有多種支援的 GUI (如 SourceTree, GitHub Desktop),讓新人容易上手(也容易搞砸,特別是 GUI 用久了,會不了解後面究竟發生了什麼事情)。

在 Git 中,由 Git 所控制的專案,我們將其稱為 Git Repository,而 GitHub/GitLab 便是可以儲存並控制 Repository 的雲端伺服器,藉由共享在雲端 (公有或私有雲) 的 Repository,我們便能達到多人協作一份專案。

當多人協作開發時,Git 的幾項優點變隨之展露:

  • 可藉由分支(branch) 區分開發的目標、環境
  • 每個開發人員有自己獨立的變更歷程(local commit),並且能與其他開發者共享,同步 (merge)
  • 掌控專案進度 (我的 PM 沒事就愛 Fetch)

commit & push 好了,然後呢?

當程式碼的開發完成到可交付的階段後,我們會讓這些程式運行在一台電腦上,而將程式碼移動(不論是手動或自動)到可運行的環境上 (一台灌有某個執行系統的電腦) 並執行的動作,就被我們稱之為部署。(像我這次鐵人賽的 Title 就是沒注意到打錯字,結果開賽後改不了...)

然而,當我們完成了程式碼的部署,在真正開放網站給用戶前,還需要進行一系列的測試,來確用戶能夠在操作時獲得最佳的使用者體驗。測試項目包含以腳本形式錄製並執行用戶所有操作的整合測試、對於系統附載程度的壓力測試 (Ex: 模擬雙 11 購物節瞬間收到大量請求)等。

想像一下,我們將代表學校參加作文比賽,將文章寫完後先交給父母檢查,父母看完沒問題後再交給學校老師,老師也點頭後,才代表學校將文章送出去;同樣的,在交付產品給用戶之前,我們一定會完成所有的測試,再交給客戶,而客戶也會親自測試一遍後,才開放讓其他的人來使用;因此,在完成程式碼的開發後,這些程式碼其實會逐次的被送往不同的機器上、給不同的人、做不同形式的測試;而常見的環境以其目的性質又可以分為以下幾個:

  • DEV (開發環境):
    • 在此階段最小可以是開發者的電腦,能夠在開發的電腦上啟動跟運行,並頻繁的更新
  • SIT System Integration Test (系統整合測試環境):
    • 當開發團隊完成開發後,會將程式碼運行在 SIT 環境,此時運行的電腦已經是伺服器等級,且運行的系統和規模會盡量與正式的環境一致
    • 通常建置在開發團隊的內網中,外部的使用者無法輕易訪問,其主要目的是讓開發團隊模擬與測試真實上線的環境
    • 為了最好的調節資源,有一些情況還會臨時設置一些測試的環境,在完成測試後關閉並釋放資源
  • UAT User Acceptance Testing (用戶驗收測試環境):
    • 當 SIT 環境的測試通過後,程式碼將會被移轉到 UAT 環境交由用戶測試,概念上是甲方的驗收環境
    • UAT 環境也會視客戶的需求而不同,而經 UAT 測試確認無誤後,才會真正部署程式到 PROD 上
  • PROD Production (正式運行環境):
    • PROD 的環境會正式開放給用戶使用,其中運行的程式已經過。

這樣看來,撇除開發者自己的電腦外,程式碼還會經過 2 ~ 3 台實體電腦,有的時候公司或是客戶會採用雲端租賃與託管的方式,在 AWS、GCP、Azure 上租用虛擬機作為上述的環境。

後續的章節中,我們會講解伺服器與 Linux 作業系統的基礎知識,以及幾個重要的指令,來幫助我們完成部署的手續。

Git 分支和環境的關係

在 DevOps 的環節中,Git 分支能夠生成 Webhook,達到當 GitHub/GitLab 偵測到有新的 commit or push 時,會觸發 CI 的工具(如 Jenkins),讓 CI 工具能主動將 Repository 內的 SourceCode 同步,並執行打包、測試等手續。

而剛才也提到,在服務正式開放給用戶使用之前,會先經歷不同的環境測試,也因此,Git 甚至能藉由不同的分支,來觸發不同的 Pipeline 流程,將程式碼整合並部署到對應的運行環境中。

今日結語

今天,我們介紹了 Git 和個執行環境,以及他們倆者之間可能的互動模式,這裡我決定先帶大家完成手動的部署後,再來與各位介紹 Gitflow 的實作,並直接與 Jenkins 互動,明天我們將介紹 Linux 與伺服器,與常用的指令。


上一篇
Day13: ColorCodeTag 前端建構 (下)
下一篇
Day15: Linux 介紹與基本指令
系列文
一個人也能 DevOps ? 用 Angular + Spring Boot 演示專案由開發到部署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言