使用Github Action 進行CI-CD

x1uc發表於2024-10-28

原文地址:https://www.x1uc.top/blog/github-action-use

使用Github Action 進行CI-CD

我的部落格建立起來還沒有多久,所以時不時的會加一些功能。但是每一次加完功能之後,部署的步驟總是非常非常的麻煩。
後端步驟:maven打包->jar包放到伺服器上->停止java容器-> 刪除java映象-> 重新build映象-> 啟動容器
前端步驟 -> 打包 -> 放到伺服器上 -> 刪除舊包 -> 包改名 ->重啟伺服器
每一次想要加功能的時候想到這繁瑣的步驟,直接勸退了。

我現在在實習的公司,開發環境更新的時候也可以說極度的麻煩。但是最近leader搭了一個Jenkins來簡化更新。不得不說,是真的好用。所以我決定給我的部落格開發也加上CI/CD

因為我部落格的程式碼本來就是放在Gihub上進行託管,之前雖然沒有使用過Github Action但是也聽說過有這麼個東西,伺服器本身的記憶體也不大,也沒必要折騰Jenkins

Github Action 是什麼

Github Action 可以理解為 Github 免費提供的一個雲伺服器。

當你的倉庫有變化的時候(例如:有新的提交),會觸發伺服器執行對應的指令碼。

Github Action 如何使用

既然是一臺雲伺服器,能幹的事情當然就很多了。但是我認為最重要的就是:連線我們自己的伺服器。

workflow大概是這樣:commit程式碼 -> 觸發github action -> github伺服器 connect 我的伺服器 -> 執行指令碼(拉取最新程式碼-> 打包 -> 部署)

我們如何操作Github的這臺伺服器呢?靠的是.github/workflows/main.yml配置檔案。
如何建立這個指令碼呢?如圖所示(當然也可以手動建立)

下面我們會分為兩步講:

  1. 如何使用Github提供的伺服器連線自己的伺服器
  2. 如何使用main.yml配置檔案執行指令碼

Github Action 如何連線 我的伺服器

連線伺服器使用的自然是ssh連線。分為四步

  1. 生成金鑰(公鑰&私鑰)
  2. 將私鑰內容貼上,放到圖片所示位置
  3. 將公鑰放到 ~/.ssh/authorized_keys 檔案中,這個檔案可以放置多個公鑰
  4. 配置main.yml 檔案。

配置main.yml檔案

我貼一下自己的main.yml檔案

如果你也是和我一樣,只是想使用github的伺服器連線上自己的伺服器執行指令碼。那你完全可以只需要關注 Deploy to server 的 run 部分的程式碼。
前端部分:

name: Deploy to Server

on:
  push:
    branches:
      - main  # 觸發的分支

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Set up SSH key
        uses: webfactory/ssh-agent@v0.9.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

            

      - name: Deploy to server
        run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
            # 導航到專案目錄
            cd /home/ecs-user/repo/YueZi_Blog

            # 拉取最新程式碼
            git pull origin main

            # 安裝依賴
            npm install  # 或者適用於您的專案的命令

            # 構建專案
            npm run build  # 或者適用於您的專案的命令

            cd /home/ecs-user/repo
            ./update.sh
          EOF

後端部分:

name: Deploy to Server

on:
  push:
    branches:
      - main  # 觸發的分支

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Set up SSH key
        uses: webfactory/ssh-agent@v0.9.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

            

      - name: Deploy to server
        run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} << 'EOF'
            # 導航到專案目錄
            cd /home/ecs-user/repo/YueZi_Blog_BackEnd
      
            # 配置 SDKMAN
            export SDKMAN_DIR="$HOME/.sdkman"
            [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
      
            # 拉取最新程式碼
            git pull origin main
      
            # 構建專案
            mvn clean install -DskipTests
            rm -rf ~/Blog_BackEnd/YueZi_Blog-0.0.1-SNAPSHOT.jar
            mv target/YueZi_Blog-0.0.1-SNAPSHOT.jar ~/Blog_BackEnd/
            cd ~/Blog_BackEnd
            ./update.sh
          EOF

相關文章