github action 实现golang服务自动部署到腾讯云

创建 仓库

我这里创建了一个名字为 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 流,检查步骤是否执行成功

点击进去最近执行的一次,也就是第一个,可以查看执行步骤详情

可以点开每个折叠的步骤查看

查看服务器上面服务是否正常启动