创建 仓库
我这里创建了一个名字为 ai360_xcx 的仓库,以下就用这个仓库在演示
进入仓库首页,然后提交一些 golang 的代码
设置 Actions secrets 参数
这里我使用的 ssh 的账号密码方式,有些人用的私钥的方式,不过我测试有一些问题,所以就用账号密码了
添加3个 secrets 变量
- HB_HOST(服务器 ip)
- HB_PASS(ssh 密码)
- HB_USER(ssh 用户)
添加 action 流
回到仓库首页,点击 action ,选择一个模板,比如我选择了 Go 这个模板
然后写入下面内容
逻辑是先用 github action 提供的环境打包,然后通过 scp 传到服务器的某个目录下,然后用 ssh 去执行脚本命令启动或重启服务
go-action-demo1.yml (需要修改成自己服务名称和路径)
# action 流名称
name: build-and-deploy Go
on:
push: #监听 push 事件
branches:
- main #监听分支
jobs:
build:
# 不要用22的版本
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: 1、set up golang 安装 go 环境
uses: actions/setup-go@v4
with:
go-version: '1.20'
- name: 2、go build 打包go程序
run: GOOS=linux GOARCH=amd64 go build -ldflags '-linkmode=external -extldflags=-static' -ldflags="-s -w" -trimpath -o ai360_api main.go
- name: 3、scp 传到服务器上
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ vars.HB_HOST }}
username: ${{ vars.HB_USER }}
password: ${{ vars.HB_PASS }}
#这里是需要传输的文件,可以多个,比如这里的 ai360_api 和 .env
source: "ai360_api,.env,start.sh"
#这里是设置传输到服务器 /app/ai_360/ 目录,必须是这个账号有权限的目录
target: "/app/ai_360/"
- name: 4、deploy service 部署服务
uses: nekiro/ssh-job@main
with:
host: ${{ vars.HB_HOST }}
password: ${{ vars.HB_PASS }}
user: ${{ vars.HB_USER }}
#这里是执行多行脚本
command: |
cd /app/ai_360/
./start.sh
start.sh 文件内容(需要修改成自己服务名称和路径)
#!/bin/bash
# 重启脚本
pid=$(pgrep -f "ai360_api")
if [ -n "$pid" ]; then
echo "Stopping ai360_api (PID: $pid)..."
kill $pid
sleep 2 # 可选的等待时间,确保进程完全终止
fi
# 启动 ai360_api 服务
echo "Starting ai360_api..."
cd /app/ai_360/
nohup ./ai360_api > logs 2>&1 &
echo "ai360_api started."
pid=$(pgrep -f "ai360_api")
echo "新进程pid=$pid"
最后提交
提交 action 流,检查步骤是否执行成功
点击进去最近执行的一次,也就是第一个,可以查看执行步骤详情
可以点开每个折叠的步骤查看