CodeGym /課程 /Kotlin SELF /將程式碼部署到伺服器

將程式碼部署到伺服器

Kotlin SELF
等級 10, 課堂 6
開放

1. 修改程式碼

如我之前所說,軟體開發本質上就是對程式碼進行小幅度的修改。數十年來,數以百萬計的程式設計師都在做這件事,因此這個流程已被充分打磨、標準化,並用各種方式形式化。

用來保存程式碼有一套專門的工具——Git。Git 是一種分散式版本控制系統。它不只是存放程式碼,還會追蹤其中的所有變更,並協助程式設計師在互不干擾的情況下一起協作 🤝。

透過 Git,開發者可以建立不同的專案版本(分支)、保存完整的變更歷史,甚至能回到過去任何一個時間點。就像是程式碼的時光機!Git 也能協助合併變更並解決衝突,因此它已成為現代開發中團隊協作的核心工具。👩‍💻

2. 建置專案

在測試或上傳到伺服器之前,專案需要先完成建置。

🏗️ 專案建置(build)是將專案的原始碼編譯成可執行程式或其他可執行格式的流程,通常也會包含測試與部署步驟。這是軟體開發中的關鍵環節,用來確保程式已準備好被使用。

建置不只是編譯,雖然編譯常常是建置流程的一部分。建置完成後,你可能會得到數十甚至數百個檔案,接著需要把它們上傳到不同的伺服器上。

建置工具也有低階的,例如:

  • ☕ Maven 與 Gradle——在 Java 專案中廣泛使用,用於依賴管理與專案建置。
  • 🐜 Apache Ant——另一個 Java 專案建置工具,在撰寫建置腳本方面提供更高的彈性。
  • 🖥️ MSBuild——用於建置使用 Microsoft Visual Studio 建立的專案。
  • ⚙️ Make——經典的建置工具,使用 Makefile 定義建置規則,特別常見於 C 與 C++ 專案。
  • 🌐 Webpack——常用於建置 JavaScript 應用程式,負責管理依賴與模組。
  • 📜 Gulp 與 Grunt——用於自動化 Web 應用開發中的常見任務,例如檔案壓縮(minify)以及將 SCSS 編譯成 CSS。

另外也有高階的建置工具。下面會提到。

3. CI/CD

🔄 CI/CD(Continuous Integration/Continuous Delivery)是一種方法論,主張將所有開發分支的變更持續合併到主分支,並對這些變更進行自動化測試與部署。這能更快地發現並修正錯誤,提升效率並加快開發速度。

最常見但也稍微有點過時的 CI/CD 系統之一是 Jenkins。如果你在一家小公司工作,大概有 80% 的機率會使用它。

🤖 Jenkins 是一套常用的自動化系統,用於持續整合與交付(CI/CD)。Jenkins 能自動化軟體開發的各個階段,包括建置、測試與部署,從而提升程式碼品質並加速開發流程。

如果你進到大型公司,可能還會有另外 5 種選擇:

  • 🚦 TeamCity——JetBrains 出品的強大商業系統,提供與各種開發與測試環境的深度整合。
  • 📝 GitLab CI——GitLab 的內建功能之一,透過可設定的 YAML 檔提供持續整合與交付能力。
  • ☁️ CircleCI——雲端 CI/CD 服務,支援為多種專案自動化測試與部署。
  • 🦑 Travis CI——早期的雲端 CI 服務之一,被許多開源專案使用,並且與 GitHub 整合良好。
  • 🎍 Bamboo——Atlassian 的產品,與同公司其他工具(例如 Jira 與 Bitbucket)緊密整合。

你不需要記住它們或學會操作——公司通常會有 DevOps 專家來配置這些流程。你只需要知道它們的存在,並且在對話中提到 Jenkins、CI/CD 或「continuous integration」時,能理解在說什麼即可。

4. 將專案交付到伺服器

專案不只是寫完就好——它還必須出現在你的伺服器上。一般來說,把專案部署(deploy)到伺服器,是將 Web 應用程式放置並啟用在伺服器上,讓使用者能透過網際網路存取的流程 🚚。

這個流程包含:把專案檔案傳到伺服器、設定伺服器環境、資料庫、依賴項,並配置網路設定與安全性 😅。

那你覺得你的程式碼會怎麼到伺服器上?有人會手動上傳嗎?或者你用 SSH 連到遠端伺服器,上傳幾個檔案再慢慢設定?放輕鬆:現在幾乎沒人這樣做了。現在有 Docker。

🐳 Docker 是一個用容器來開發、交付與執行應用程式的平台。Docker 透過把應用程式連同所有依賴與環境一起打包成單一緊湊的物件,簡化了建立、部署與執行。這能確保從開發到測試再到正式環境(production)的每個階段,環境一致。

Docker 讓你可以把你的專案(或多個專案)打包成 Docker 容器。它有點像虛擬機。

雖然在任何 Docker 論壇上,如果你把它稱作「虛擬機」可能會被吐槽,但你確實可以把 Docker 容器理解成虛擬機——只是更輕量。

本質上,Docker 容器可以視為一種「虛擬的虛擬機」。傳統虛擬機會包含完整的作業系統副本、OS 核心與虛擬硬體;而 Docker 容器會共享主機的核心,因此可能更輕、更快 ⚡。

使用 Docker 來部署專案能大幅簡化流程,兼具速度與可靠性。專案被打包成 Docker 容器後,就能輕鬆搬移並在任何支援 Docker 的系統上執行 🚢。

這能避免因伺服器環境差異帶來的問題,並且可以依負載輕鬆擴縮應用程式:需要時新增容器,不需要時移除容器。幾乎大家都轉向 Docker——真的很方便,也很簡單。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION