利用Github Action自动化部署SpringBoot项目
环境准备
- 一台拥有公共IP的
1核1G
以上配置的Linux云服务器。这里推荐三豊云永久免费的1核1G的云服务器,是真的好用。笔者选用的Linux
发行版为CentOS Linux release 7.0.1406 (Core)
- 已安装好
JDK8
与Maven
。若是还未安装,可以参考以下笔者的安装方式。
项目设置
Github Setting
进入Github仓库管理界面,依次点击Setting
->New Repository Sectet
。分别解释以下的字段和值
HOST
:私有服务器公网IP地址USERNAME
:私有服务器公网用户名,笔者选择root
PASSWORD
:私有服务器USERNAME
对应密码PORT
:私有服务器公网端口,一般取22
Project Setting
在项目的根目录下新增/.github/workflows/maven.yml
并在maven.yml
添加以下内容.
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
name: Java CI with Maven
# 触发构建时机
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
# 任务
jobs:
build:
# Github Action CI/CD的机器选择。
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8.0.362'
distribution: 'temurin'
cache: maven
# maven缓存,不加的话每次都会去重新拉取,会影响速度
- name: Dependies Cache
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
# Maven 打包
- name: Build with Maven
run: mvn clean package --file pom.xml
# 将打包后的Jar包从Github Action服务器传输至私人服务器中
- name: Transfer jar packets
uses: garygrossgarten/github-action-scp@release
with:
# Github Action 的服务器文件路径
local: target/demo-0.0.1-SNAPSHOT.jar
# 私有服务器文件路径
remote: /home/demo-0.0.1-SNAPSHOT.jar
# 私有服务器公网IP地址
host: ${{ secrets.HOST }}
# 私有服务器用户名
username: ${{ secrets.USERNAME }}
# 私有服务器用户密码
password: ${{ secrets.PASSWORD }}
# 部署运行
- name: Deploy
uses: appleboy/ssh-action@master
with:
# 同上述
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
# ssh进入系统后执行什么样的操作。一般是关闭原有的服务在重启
script: |
cd /home
ps -ef | grep demo-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $2}' | xargs kill -9
# nohup /usr/local/java/jdk1.8.0_361/bin/java -jar /home/demo-0.0.1-SNAPSHOT.jar > nohup.out &
nohup /usr/local/java/jdk1.8.0_361/bin/java -jar /home/demo-0.0.1-SNAPSHOT.jar > runtime.log 2>&1 &
pwd
问题与解决
1问题. runtime.log日志显示
nohup: 无法运行命令“java“: 没有那个文件或目录
1原因:无法识别\(`\)JAVAHOME`$的环境变量
1解决:用绝对路径/usr/local/java/jdk1.8.0_361/bin/java
即可