白嫖GitHub Action實現開源專案CICD

2023-04-26 12:00:55

什麼是CI/CD?讓你的專案變得更加敏捷!

在今天這個快速變化的時代,開發者們需要與時俱進,不斷提升自己的工作效率。在這篇文章裡,將一起探討如何使用CI/CD和Github Action讓你的專案更加高效,快速響應市場變化。

什麼是CI?

CI(持續整合,Continuous Integration)是一種軟體開發實踐,它要求開發者頻繁地將程式碼整合到共用的主幹分支中。每次整合都會觸發自動化的構建和測試,以便儘早發現和修復問題,減少整體風險。

什麼是CD?

CD(持續交付和持續部署,Continuous Delivery/Deployment)是一種緊密跟隨CI的實踐。它要求在一個自動化的、可複製的環境中,持續地將軟體交付給客戶或部署到生產環境。這樣可以確保軟體始終處於可交付或可部署的狀態。

使用CI/CD的目的

採用CI/CD的主要目的是提高軟體開發過程的效率和質量,從而加快交付速度,縮短反饋週期,降低風險,提高客戶滿意度。CI/CD在敏捷開發、DevOps等現代軟體開發方法中扮演著核心角色。

Github Action是什麼

Github Action是GitHub提供的一項自動化服務,它允許你在GitHub倉庫中直接定義、構建和執行CI/CD流水線。你可以建立自定義的工作流程,以響應各種事件,如程式碼提交、Pull Request或者定時任務。

如何在自己的專案上使用Github Action

  1. 在你的GitHub倉庫中建立一個名為.github/workflows的目錄。
  2. 在該目錄中建立一個YAML檔案,如ci-cd.yml,來定義你的工作流程。
  3. 編輯YAML檔案,編寫工作流程的各個步驟,如檢出程式碼、構建、測試、部署等。
  4. 提交YAML檔案到倉庫,Github Action會自動執行你定義的工作流程。

Github + DockerHub等於CI/CD

通過將Github Action與DockerHub等其他服務相結合,你可以更輕鬆地實現CI/CD。例如,你可以將構建好的Docker映象推播到DockerHub,然後使用Kubernetes等工具將映象部署到生產環境。

如何利用Github Action實現CI/CD:一個實戰案例

在前面的文章中,已經瞭解了CI/CD的基本概念和Github Action的功能。接下來,將通過一個實際的Github專案來詳細介紹如何使用Github Action實現CI/CD流程。

以下是整個CI/CD過程的簡要概述:

  1. 定義workflow
  2. 本地修改程式碼
  3. 建立PR(Pull Request)
  4. 合併PR
  5. workflow自動觸發完成CI/CD

具體步驟如下:

1. 定義workflow

在你的GitHub倉庫中建立一個名為.github/workflows的目錄,然後建立一個YAML檔案,如ci-cd.yml,用於定義你的CI/CD流程。具體可以看看這裡

image.png

2. 本地修改程式碼

在本地環境中修改程式碼並進行測試,確保程式碼的質量和可用性。

3. 建立PR(Pull Request)

將本地修改的程式碼提交到GitHub倉庫,並建立一個PR,以便其他團隊成員進行程式碼審查(嗚嗚嗚,然而我沒有其他成員)。

4. 合併PR

在程式碼審查通過後,合併PR到主幹分支。

5. workflow自動觸發完成CI/CD

一旦PR被合併,Github Action會自動觸發定義好的workflow。在本案例中,workflow將完成以下任務:

CI:自動構建Docker映象,推播到DockerHub

  1. 檢出程式碼:Github Action會自動將最新的程式碼檢出到工作環境中。
  2. 構建Docker映象:根據專案中的Dockerfile,構建新的Docker映象。
  3. 推播Docker映象到DockerHub:將構建好的Docker映象推播到DockerHub,以便其他人可以輕鬆獲取和使用。

CD:自動拉取最新Docker映象,啟動專案,並重啟相關服務

  1. 登入部署伺服器:通過SSH登入到目標伺服器。
  2. 拉取最新Docker映象:從DockerHub拉取最新版本的Docker映象。
  3. 啟動專案:執行新的Docker映象,啟動專案範例。
  4. 重啟相關服務:如果專案依賴其他服務,例如Ngin等,確保這些服務也被正確地重啟。
sequenceDiagram participant Dev as Developer participant Repo as GitHub Repository participant GHAction as GitHub Action participant DockerHub as Docker Hub participant Server as Deployment Server Dev->>Repo: Push local changes Dev->>Repo: Create Pull Request Dev->>Repo: Merge Pull Request Repo->>GHAction: Trigger CI/CD workflow GHAction->>Repo: Checkout code GHAction->>GHAction: Build Docker image GHAction->>DockerHub: Push Docker image GHAction->>Server: SSH login GHAction->>Server: Pull latest Docker image GHAction->>Server: Start project instance GHAction->>Server: Restart related services

在這個時序圖中,可以看到整個實戰案例中的CI/CD流程。首先,開發者將原生的更改推播到GitHub倉庫,並建立併合並Pull Request。當Pull Request被合併時,GitHub Action會自動觸發CI/CD工作流程。接下來,GitHub Action會執行一系列操作,包括檢出程式碼、構建Docker映象、推播映象到Docker Hub以及登入部署伺服器、拉取最新映象、啟動專案範例並重啟相關服務。這個時序圖可以幫助你更直觀地理解CI/CD的過程。

Github Action的優劣勢

優勢

  1. 與GitHub倉庫緊密整合,方便使用。
  2. 支援豐富的事件觸發器和可自定義的工作流程。
  3. 免費額度較為充足,適合個人專案和小團隊。
  4. 有大量的開源Action可供選擇,可以節省時間和精力。

劣勢

  1. 對於大型專案和企業級使用者,可能需要更高的效能和更多的資源,而Github Action的免費額度有限。
  2. 與第三方服務的整合可能不如專業的CI/CD平臺靈活。
  3. 部分高階功能需要付費使用。

在這裡,非常希望聽到你關於CI/CD和Github Action的看法。你是否已經在專案中應用了這些實踐?你認為它們如何幫助你提高效率和質量?請在評論區留下你的想法,讓我們一起交流、學習、進步!

如果你喜歡這篇文章,別忘了點贊、分享和關注我的部落格,以便在第一時間獲取更多關於科技、程式設計和創新的精彩內容!我們期待與你一起成長!