81 lines
2.2 KiB
YAML
81 lines
2.2 KiB
YAML
name: Deploy to Server
|
||
|
||
# 触发条件:手动触发或推送到 main 分支
|
||
on:
|
||
push:
|
||
branches: [ main, master ]
|
||
workflow_dispatch: # 允许手动触发
|
||
|
||
jobs:
|
||
build-and-deploy:
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
# 1. 检出代码
|
||
- name: 检出代码
|
||
uses: actions/checkout@v3
|
||
|
||
# 2. 设置 Java 环境
|
||
- name: 设置 Java 8
|
||
uses: actions/setup-java@v3
|
||
with:
|
||
java-version: '8'
|
||
distribution: 'temurin'
|
||
cache: 'gradle'
|
||
|
||
# 3. 赋予 Gradle wrapper 执行权限
|
||
- name: 赋予 Gradle wrapper 执行权限
|
||
run: chmod +x gradlew
|
||
|
||
# 4. 构建项目
|
||
- name: 构建项目
|
||
run: ./gradlew build -x test
|
||
|
||
# 5. 打包 JAR 文件
|
||
- name: 获取 JAR 文件名
|
||
id: jar
|
||
run: echo "jar_file=$(ls build/libs/*.jar | head -n 1)" >> $GITHUB_OUTPUT
|
||
|
||
# 6. 部署到服务器(使用 SCP)
|
||
# 需要在 Gitea 仓库设置中配置以下 Secrets:
|
||
# - SERVER_HOST: 服务器地址
|
||
# - SERVER_PORT: SSH 端口(默认 22)
|
||
# - SERVER_USER: SSH 用户名
|
||
# - SERVER_SSH_KEY: SSH 私钥
|
||
# - DEPLOY_PATH: 部署路径(如 /opt/corewing)
|
||
- name: 部署到服务器
|
||
uses: appleboy/scp-action@master
|
||
with:
|
||
host: ${{ secrets.SERVER_HOST }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SERVER_SSH_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
source: "build/libs/*.jar"
|
||
target: ${{ secrets.DEPLOY_PATH }}
|
||
strip_components: 2
|
||
|
||
# 7. 重启应用(通过 SSH 执行命令)
|
||
- name: 重启应用
|
||
uses: appleboy/ssh-action@master
|
||
with:
|
||
host: ${{ secrets.SERVER_HOST }}
|
||
username: ${{ secrets.SERVER_USER }}
|
||
key: ${{ secrets.SERVER_SSH_KEY }}
|
||
port: ${{ secrets.SERVER_PORT }}
|
||
script: |
|
||
cd ${{ secrets.DEPLOY_PATH }}
|
||
# 停止旧进程
|
||
pkill -f corewing || true
|
||
# 等待进程完全停止
|
||
sleep 3
|
||
# 启动新进程
|
||
nohup java -jar *.jar > app.log 2>&1 &
|
||
# 检查启动状态
|
||
sleep 5
|
||
if pgrep -f corewing > /dev/null; then
|
||
echo "应用启动成功"
|
||
else
|
||
echo "应用启动失败"
|
||
exit 1
|
||
fi
|