GitHub Actions自动部署Spring Boot后端到ECS

星期一, 6月 22, 2026 | 2分钟阅读 | 更新于 星期一, 6月 22, 2026

@

前面文章记录了手动部署 Spring Boot 后端到阿里云 ECS 的过程。每次改完代码都要手动打包上传,效率很低。本文记录如何利用 GitHub Actions 实现代码推送到私有仓库后,自动部署后端到 ECS。

一、整体流程

本地 push → GitHub 私有仓库 → GitHub Actions → SSH 连接 ECS → git pull → mvn package → 重启服务

核心思路:GitHub Actions 通过 SSH 连接到 ECS,在服务器上执行部署脚本。

二、配置 SSH 免密登录

生成专用密钥对

在 ECS 服务器上生成一份给 GitHub Actions 用的密钥:

ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/github_actions
# 一路回车,不设密码

配置 authorized_keys

cat ~/.ssh/github_actions.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

获取私钥

cat ~/.ssh/github_actions
# 复制完整内容(包括 -----BEGIN OPENSSH PRIVATE KEY----- 和 -----END-----)

三、GitHub 仓库配置

添加 Secrets

进入仓库 → Settings → Secrets and variables → Actions → New repository secret:

Secret 名称
ECS_HOSTECS 公网 IP,如 47.xx.xx.xx
ECS_USERSSH 用户名,如 root
ECS_SSH_KEY上一步的私钥内容

私有仓库额度

GitHub Actions 在私有仓库中每月有 2000 分钟免费额度,个人项目完全够用。

四、首次克隆私有仓库到 ECS

GitHub Actions 需要在 ECS 上有一份代码,所以先在服务器上 clone 下来:

cd /opt/app

# 方式一:Deploy Key(推荐)
# 在 GitHub 仓库 Settings → Deploy keys → Add deploy key
ssh-keygen -t ed25519 -C "ecs-deploy-key"
cat ~/.ssh/id_ed25519.pub   # 复制公钥添加到 GitHub
git clone git@github.com:你的用户名/你的仓库.git myapp-backend

# 方式二:Personal Access Token
git clone https://TOKEN@github.com/你的用户名/你的仓库.git myapp-backend

五、编写 Workflow

在项目根目录创建 .github/workflows/deploy-backend.yml

name: Deploy Backend to ECS

on:
  push:
    branches:
      - main
    paths:
      - 'backend/**'  # 只在后端代码变更时触发

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.ECS_HOST }}
          username: ${{ secrets.ECS_USER }}
          key: ${{ secrets.ECS_SSH_KEY }}
          script: |
            cd /opt/app/myapp-backend
            git pull origin main
            mvn clean package -DskipTests
            mv target/*.jar /opt/app/myapp.jar
            systemctl restart myapp
            echo "后端部署完成"

关键配置说明

  • paths: ['backend/**']:只在后端代码变更时触发,前端改动不会重启后端
  • appleboy/ssh-action:社区最常用的 SSH Action,Star 10k+
  • script 中的命令在 ECS 上串行执行,任一步失败则 workflow 标记为失败

六、版本回滚

出问题需要回滚时,手动执行回滚:

# ECS 上回滚到上一个版本
cd /opt/app/myapp-backend
git log --oneline -5       # 找到要回滚的 commit
git reset --hard <commit>
mvn clean package -DskipTests
mv target/*.jar /opt/app/myapp.jar
systemctl restart myapp

也可以在 GitHub Actions 中添加一个可手动触发的回滚 workflow:

name: Rollback Backend

on:
  workflow_dispatch:
    inputs:
      commit:
        description: '要回滚到的 commit hash'
        required: true

jobs:
  rollback:
    runs-on: ubuntu-latest
    steps:
      - uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.ECS_HOST }}
          username: ${{ secrets.ECS_USER }}
          key: ${{ secrets.ECS_SSH_KEY }}
          script: |
            cd /opt/app/myapp-backend
            git fetch --all
            git reset --hard ${{ github.event.inputs.commit }}
            mvn clean package -DskipTests
            mv target/*.jar /opt/app/myapp.jar
            systemctl restart myapp
            echo "已回滚到 ${{ github.event.inputs.commit }}"

七、查看部署状态

push 后在 GitHub 仓库 → Actions 查看:

  • 🟡 黄色:正在执行
  • 🟢 绿色:部署成功
  • 🔴 红色:部署失败(点击查看日志)

失败时 GitHub 会自动向你的邮箱发送通知。

八、安全注意事项

  1. SSH Key 隔离:给 GitHub Actions 用的密钥单独生成,不要用个人密钥
  2. ECS 安全组:不需要为此开放新端口,SSH 是 GitHub 主动连你
  3. Secrets 保护:GitHub Actions 日志会自动隐藏 Secrets 值
  4. 分支保护:建议只监听 main 分支,开发分支不触发部署

总结

GitHub Actions 本质是 GitHub 提供的免费 CI 服务器。后端自动部署核心步骤:

Secrets 存密钥 → push 触发 → SSH 连 ECS → git pull → mvn package → systemctl restart

相比手动 scp 上传:提交即部署、出错可回溯、不用记命令。

© 2026 My Blog

🌱 Powered by Hugo with theme Dream.