使用GitHub Actions CICD Maven 項目

一、GitHub Actions 是什么?

GitHub Actions 是 GitHub 提供的一項持續(xù)集成和持續(xù)部署(CI/CD)服務,它允許你在 GitHub 倉庫中自動化運行軟件開發(fā)生命周期流程。借助該服務,你可以直接在 GitHub 倉庫里創(chuàng)建工作流,這些工作流能夠在代碼發(fā)生特定事件(如推送、拉取請求等)時自動執(zhí)行一系列任務。

二、配置 SSH 連接騰訊云服務器

  1. 添加 服務器配置:
    SERVER_USERNAME:登錄遠程服務器的賬戶名
    SSH_PRIVATE_KEY:登錄遠程服務的私鑰
    SERVER_PORT:ssh端口,未改過的固定22
    SERVER_HOST:遠程服務器地址


    image.png
  2. 私鑰獲取、配置方式
    2.1:可以在本地環(huán)境,打開命令界面,輸入 ssh-keygen -t rsa -b 4096 -C "your_email@example.com",回車后,會提示你輸入一些配置來生成密鑰文件,一直回車就好了,省事些。
    2.1:找到生成的私鑰(默認為 id_rsa),公鑰(默認為 id_rsa.pub)文件;將私鑰文件的內容配置到上面圖的SSH_PRIVATE_KEY配置項的值里面取。
    2.3:將公鑰文件內容,粘貼到遠程服務器的~/.ssh/authorized_keys文件中;如果該文件不存在,需要創(chuàng)建它。
    image.png

三、項目中配置 Actions

  1. 在項目根目錄下創(chuàng)建.github/workflows/deploy.yml 文件

    image.png

  2. 編寫yml文件

# 工作流的名稱,用于在 GitHub Actions 界面中標識該工作流
name: deploy

# 定義工作流的觸發(fā)條件
on:
  # 手動觸發(fā)
  workflow_dispatch:
  # 當有新的版本(release)被創(chuàng)建時觸發(fā)工作流
  release:
    types: [created]

# 定義工作流中的作業(yè)
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Build with Maven
        run: mvn -B -Dmaven.test.skip=true package --file pom.xml

      # ---------------------- 新增:準備 SSH 私鑰(關鍵?。?---------------------
      - name: Prepare SSH Private Key
        run: |
          # 創(chuàng)建臨時目錄并寫入私鑰
          mkdir -p ~/.ssh
          echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
          # 設置私鑰權限(必須為 600,否則 SSH 拒絕使用)
          chmod 600 ~/.ssh/id_rsa

      # ---------------------- 遠程操作:停止服務 & 清理舊文件 ----------------------
      - name: Stop service and clean old JAR
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SERVER_PORT }}
          script: |
            # 停止服務(遠程操作)
            /opt/retrieve-back/retrieve-back.sh stop
            # 清空舊文件(遠程操作)
            rm -f /opt/retrieve-back/admin.jar

      # ---------------------- 本地操作:SCP 上傳新 JAR 文件(核心修正?。?---------------------
      - name: SCP Upload New JAR File
        run: |
          # 拼接本地 JAR 路徑(GITHUB_WORKSPACE 是本地環(huán)境變量,此處有效)
          LOCAL_JAR_PATH="$GITHUB_WORKSPACE/admin/target/admin.jar"
          # 檢查文件是否存在
          if [ ! -f "$LOCAL_JAR_PATH" ]; then
            echo "錯誤:JAR 文件不存在于 $LOCAL_JAR_PATH"
            exit 1
          fi
          # 使用私鑰進行 SCP 上傳(通過 -i 選項指定私鑰文件)
          scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa "$LOCAL_JAR_PATH" "${{ secrets.SERVER_USERNAME }}@${{ secrets.SERVER_HOST }}:/opt/retrieve-back/admin.jar"
        shell: bash

      # ---------------------- 遠程操作:啟動服務 & 檢查狀態(tài) ----------------------
      - name: Start service and check status
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_HOST }}
          username: ${{ secrets.SERVER_USERNAME }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          port: ${{ secrets.SERVER_PORT }}
          script: |
            cd /opt/retrieve-back/
            # 啟動服務(遠程操作)
            /opt/retrieve-back/retrieve-back.sh start
            # 檢查服務狀態(tài)(可選)
            /opt/retrieve-back/retrieve-back.sh status
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容