使用GitHub Actions CICD Maven 项目

一、GitHub Actions 是什么?

GitHub Actions 是 GitHub 提供的一项持续集成和持续部署(CI/CD)服务,它允许你在 GitHub 仓库中自动化运行软件开发生命周期流程。借助该服务,你可以直接在 GitHub 仓库里创建工作流,这些工作流能够在代码发生特定事件(如推送、拉取请求等)时自动执行一系列任务。

二、配置 SSH 连接腾讯云服务器

  1. 添加 服务器配置:
    SERVER_USERNAME:登录远程服务器的账户名
    SSH_PRIVATE_KEY:登录远程服务的私钥
    SERVER_PORT:ssh端口,未改过的固定22
    SERVER_HOST:远程服务器地址


    image.png
  2. 私钥获取、配置方式
    2.1:可以在本地环境,打开命令界面,输入 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文件中;如果该文件不存在,需要创建它。
    image.png

三、项目中配置 Actions

  1. 在项目根目录下创建.github/workflows/deploy.yml 文件

    image.png

  2. 编写yml文件

# 工作流的名称,用于在 GitHub Actions 界面中标识该工作流
name: deploy

# 定义工作流的触发条件
on:
  # 手动触发
  workflow_dispatch:
  # 当有新的版本(release)被创建时触发工作流
  release:
    types: [created]

# 定义工作流中的作业
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: |
          # 创建临时目录并写入私钥
          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 是本地环境变量,此处有效)
          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

      # ---------------------- 远程操作:启动服务 & 检查状态 ----------------------
      - 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
            # 检查服务状态(可选)
            /opt/retrieve-back/retrieve-back.sh status
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容