1. 修改程式碼
如先前所述,軟體開發歸結為對程式碼進行小幅而持續的修改。數以百萬計的程式設計師在數十年間不斷從事此一流程,促使其被徹底除錯、標準化,並以各種方式形式化。
用於儲存程式碼有一款專門的工具 – Git。Git 是一套分散式版本控制系統。它不僅能儲存程式碼,還會追蹤其中的所有變更,並幫助程式設計師在不互相干擾的情況下共同開發專案 🤝.
有了 Git,開發者可以建立專案的不同版本(分支),保留完整的變更歷史,甚至回到過去的任一時刻。這就像是程式碼的時光機!Git 也能協助合併變更並解決衝突,因此成為現代團隊協作開發的核心工具。 👩💻
2. 建置專案
在將專案拿去測試或上傳到伺服器之前,必須先完成建置。
🏗️ 專案建置 是將原始碼編譯為可執行程式或其他可執行的形式,並經常包含測試與部署的流程。這是軟體開發中的關鍵環節,確保程式可被正式使用。
建置不僅僅是編譯,雖然編譯常是建置流程的一部分。建置完成後,你可能會得到數十甚至上百個檔案,需要被上傳到各種伺服器。
建置工具可能是較低階的,例如:
- ☕ Maven 和 Gradle – 在 Java 專案中被廣泛用於相依管理與專案建置。
- 🐜 Apache Ant – 另一款用於 Java 專案的建置工具,提供撰寫建置腳本的高度彈性。
- 🖥️ MSBuild – 用於建置以 Microsoft Visual Studio 建立的專案。
- ⚙️ Make – 經典的建置工具,使用 Makefile 定義建置規則,特別在 C 與 C++ 專案中相當常見。
- 🌐 Webpack – 常用於打包 JavaScript 應用,負責管理相依與模組。
- 📜 Gulp 和 Grunt – 協助自動化網頁應用開發中常見的工作,例如檔案壓縮與將 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)到伺服器,是把網路應用程式放到伺服器並使其啟用,讓使用者能透過網際網路存取的過程 🚚.
這個流程包含把專案檔案傳到伺服器、設定伺服器環境、資料庫、相依套件,以及網路與安全性配置等 😅.
那麼,你覺得你的程式碼會怎麼進到伺服器?會有人幫你上傳嗎?還是你要用 SSH 連到遠端伺服器、丟上幾個檔案並手動設定一切?放輕鬆:現在已經沒有人這樣做了。現在有 Docker。
🐳 Docker 是一個用於開發、交付與執行應用程式的平台,透過容器來實現。Docker 會把應用與所有相依與環境一起封裝成單一精簡單元,讓從開發到測試到正式環境都能維持一致。
Docker 允許將你的專案(或多個專案)打包成 Docker 容器。這有點像虛擬機器。
儘管在任何與 Docker 有關的論壇上,若你把它稱作「虛擬機器」可能會被吐槽,但把 Docker 容器想成虛擬機器是可以的,只是更為輕量。
本質上,Docker 容器可以視為一種「類虛擬機器」。傳統虛擬機器包含完整的作業系統副本、OS 核心與虛擬化硬體,而 Docker 容器則共享主機的核心,因此能更輕量且更快速 ⚡.
使用 Docker 進行專案部署能大幅簡化流程,兼具速度與可靠性。專案被封裝為 Docker 容器,可在任何支援 Docker 的系統上輕鬆搬移與啟動 🚢.
這能避免不同伺服器環境差異所造成的問題,並讓應用程式易於擴充:你可以依照負載增加或移除容器。大家都已經轉向 Docker——既方便又簡單。
GO TO FULL VERSION