GitHub Actions 实现 Java 项目 CI CD 自动部署教程

GitHub Actions使用

Github Actions官方配置说明

整体流程说明

  1. 开发 push 代码到 GitHub 指定分支

  2. GitHub Actions 自动触发工作流

  3. 拉取代码

  4. 配置 JDK 环境

  5. 使用 Maven 构建项目

  6. 将生成的 JAR 包上传到服务器

  7. 在服务器上执行部署脚本(如重启服务)

前置配置

项目要求

  • Java 项目(使用 Maven 构建)

  • 项目能通过 mvn clean package 正常打包

  • 打包后生成 JAR,例如:target/template.jar

服务器要求

  • 一台 Linux 服务器(如 Ubuntu / CentOS)

  • 已配置 SSH 登录

  • 服务器上有部署脚本,例如:

1
/opt/template/run.sh

GitHub Secrets 配置

进入 GitHub 的项目代码仓库:

Settings → Secrets and variables → Actions → New repository secret

配置以下变量:

Secret 名称 说明
SERVER_HOST 服务器 IP
PORT SSH 端口(一般是 22)
SERVER_USERNAME SSH 用户名
SSH_KEY 私钥(无密码)

⚠️ SSH_KEY 必须是完整私钥内容,例如:

1
2
3
4
-----BEGIN RSA PRIVATE KEY-----
xxxxxx
-----END RSA PRIVATE KEY-----

GitHub Actions 工作流配置

在项目根目录创建文件

1
.github/workflows/deploy.yml

内容示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
name: DEPLOY

on:
push:
branches:
- dev

jobs:
build-and-publish:
if: false
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
with:
path: .

- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: 8
distribution: "adopt"
cache: maven

- name: Build with Maven
run: |
mvn clean package -DskipTests

- name: List files
run: ls -R

- name: Display directory tree
run: tree

- name: Upload JAR to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SERVER_HOST }}
port: ${{ secrets.PORT }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SSH_KEY }}
source: target/template.jar
target: /opt/template
overwrite: true

- name: Execute shell scripts on server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
port: ${{ secrets.PORT }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SSH_KEY }}
script: |
bash /opt/template/run.sh

配置详解

工作流名称

1
name: DEPLOY

该名称会显示在 GitHub Actions 页面中,用于标识该流水线。

触发条件

1
2
3
4
5
on:
push:
branches:
- dev

含义:当代码 push 到 **dev** 分支 时触发部署

也可以写成:

1
2
- dev
- test

Job 配置

1
2
3
4
jobs:
build-and-publish:
if: false
runs-on: ubuntu-latest

说明:

  • build-and-publish:Job 名称

  • runs-on: ubuntu-latest:使用 GitHub 提供的 Ubuntu Runner

  • if: false当前禁用 Job,就是不运行,若要启用自动部署,删除if或改为if: true

拉取代码

1
- uses: actions/checkout@v3

作用:

  • 将 GitHub 仓库代码拉取到 Runner 中

设置 JDK 环境

1
2
3
4
5
6
- name: Set up JDK
uses: actions/setup-java@v3
with:
java-version: 8
distribution: "adopt"
cache: maven

说明:

  • 使用 Java 8

  • 启用 Maven 依赖缓存,加快构建速度

Maven 构建项目

1
2
3
- name: Build with Maven
run: |
mvn clean package -DskipTests

作用:

  • 编译并打包项目

  • -DskipTests:跳过测试,加快部署

上传 JAR 到服务器

1
2
- name: Upload JAR to server
uses: appleboy/scp-action@master

功能:

  • 通过 SCP 将 JAR 包上传到服务器

关键参数:

  • source:本地 JAR 路径

  • target:服务器目录

  • overwrite: true:覆盖旧文件

  • host:服务器地址

  • port:SSH 端口

  • username:服务器登录用户

  • key:SSH 私钥(如果不是私钥登录可换成 password

远程执行部署脚本

1
2
- name: Execute shell scripts on server
uses: appleboy/ssh-action@master

作用:

  • SSH 登录服务器

  • 执行部署脚本(如停止旧进程、启动新服务)

变量

在 workflow 运行时,动态取Secrets中的配置并替换

1
2
3
4
${{ secrets.SERVER_HOST }}
${{ secrets.PORT }}
${{ secrets.SERVER_USERNAME }}
${{ secrets.SSH_KEY }}

部署记录查看

选择其中一个可以看到详细记录

相关文章

ClaudeCode+GLM4.6使用教程