GitHub Actions
是 GitHub 提供的一项持续集成 (CI) 和持续部署 (CD) 服务。它允许你在代码仓库中定义和运行自动化的工作流程,以响应存储库中的事件或调度。GitHub Actions
可以用于构建、测试、打包和部署项目,也可以执行其他自动化任务。
第一步配置 secrets
第一步需要先配置secrets
,保证我们的服务器信息不暴露
首先进入你要部署的项目仓库的首页,然后点击Setting
-> Action
在这里配置我们服务器的IP和账号密码
因为这里构建的包不是很大,所以我们使用的方式是先在github action
的环境构建打包,然后将包发送到目标服务器。你也可以在github action
里让目标服务器执行命令去做git,构建,部署,启动等等相关的
GitHub Actions 的配置文件
在仓库的Actions
选项卡下点击新建,名称默认或者自定义修改,注意yml
文件的必须提交到你想要部署的分支里,否则push后不会执行,配置如下:
name: Java CI with Maven
on:
push:
branches: [ "master" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'adopt'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: copy jar
uses: cross-the-world/ssh-scp-ssh-pipelines@latest
with:
host: ${{ secrets.HOST }}
user: ${{ secrets.USERNAME }}
pass: ${{ secrets.PASSWORD }}
port: 22
scp: |
./target/springboot.jar => /opt/
last_ssh: |
JAR_NAME="springboot.jar"; PID=$(ps aux | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'); if [ -n "$PID" ]; then kill -9 $PID && echo "进程 $PID 已被杀死"; else echo "未找到与 $JAR_NAME 相关的进程"; fi
java -jar /root/springboot.jar &
这段代码是一个 GitHub Actions 的配置文件,用于在每次向 master
分支推送代码时,自动构建和部署一个 Java 项目。具体步骤如下:
-
触发条件:
- 触发条件是在
master
分支上有代码推送时。
- 触发条件是在
-
作业定义:
- 定义了一个名为
build
的作业,该作业在最新的 Ubuntu 环境中运行。
- 定义了一个名为
-
步骤:
- 代码检出:
- 使用
actions/checkout@v3
操作来检出仓库的代码。
- 使用
- 设置 JDK 8:
- 使用
actions/setup-java@v3
操作来安装 JDK 8。这里指定了 Java 版本为8
,使用的发行版为adopt
,并启用了 Maven 的缓存。
- 使用
- 使用 Maven 构建项目:
- 运行
mvn -B package --file pom.xml
命令来构建项目。-B
选项表示批处理模式,避免交互式输入。
- 运行
- 复制 jar 文件:
- 使用
cross-the-world/ssh-scp-ssh-pipelines@latest
操作来通过 SCP 将构建生成的 jar 文件复制到远程服务器。这里使用了 GitHub Secrets 来安全地存储和使用服务器的主机名、用户名和密码。 - 具体的 SCP 和 SSH 命令:
- SCP 命令:将本地的
./target/springboot.jar
文件复制到远程服务器的/root/
目录下。 - SSH 命令:
- 查找并杀死已经运行的
springboot.jar
进程:通过ps aux | grep "$JAR_NAME" | grep -v grep | awk '{print $2}'
命令找到进程 ID,然后使用kill -9 $PID
命令强制终止该进程。 - 启动新的
springboot.jar
进程:使用java -jar /root/springboot.jar &
命令在后台运行新的 jar 文件,指定最大堆内存为 1024M,最小堆内存为 256M。
- 查找并杀死已经运行的
- SCP 命令:将本地的
- 使用
- 代码检出:
这段配置文件实现了一个简单的持续集成和部署流程,自动完成代码检出、构建、上传和部署的步骤。
一个小技巧:如果SSH命令比较复杂,可以在服务器上调试好之后写入一个脚本文件script.sh
,然后这里的配置文件只需要sh script.sh
执行脚本文件即可
push分支到仓库
push
内容到仓库后,Action
会自动执行工作流,此时你再看看你配置的服务器目录,就会发现文件被拷贝过去了