Update logic_CI.yml
This commit is contained in:
195
.github/workflows/logic_CI.yml
vendored
195
.github/workflows/logic_CI.yml
vendored
@@ -1,5 +1,4 @@
|
||||
name: Go Build & Release
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
@@ -11,88 +10,85 @@ on:
|
||||
default: 8080
|
||||
type: number
|
||||
|
||||
# 统一权限配置(避免重复,且最小化权限)
|
||||
# 统一最小化权限(仅保留必要的actions/read,删除contents/write)
|
||||
permissions:
|
||||
contents: write # 仅创建Release需要
|
||||
actions: read # 读取Artifact需要
|
||||
actions: read
|
||||
|
||||
env:
|
||||
# 全局Go编译优化环境变量
|
||||
CGO_ENABLED: 0 # 禁用CGO,静态编译(无系统依赖+编译更快)
|
||||
GO111MODULE: on # 强制启用Go module
|
||||
#GOPROXY: https://goproxy.cn,direct # 国内代理,加速依赖下载
|
||||
GOSUMDB: off # 关闭sum校验,进一步加快依赖下载
|
||||
# Go编译全局优化变量
|
||||
CGO_ENABLED: 0
|
||||
GO111MODULE: on
|
||||
GOSUMDB: off
|
||||
# 七牛云远程目录(统一管理,可按需修改)
|
||||
QINIU_REMOTE_DIR: releases/
|
||||
|
||||
jobs:
|
||||
prepare-version:
|
||||
build-and-upload-qiniu:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
build_version: ${{ steps.set-hash-version.outputs.version }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1 # 仅拉取最新提交,减少克隆时间
|
||||
fetch-depth: 1 # 仅拉取最新提交,加速克隆
|
||||
|
||||
- name: Set commit hash as version
|
||||
id: set-hash-version
|
||||
# 生成版本号(短Commit Hash,合并原prepare-version任务)
|
||||
- name: 生成构建版本号
|
||||
id: set-version
|
||||
run: |
|
||||
# 简化版本生成命令,减少管道操作
|
||||
VERSION="v$(git rev-parse --short=8 HEAD)"
|
||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||
echo "build_version=${VERSION}" >> $GITHUB_OUTPUT
|
||||
echo "构建版本号:${VERSION}" >> $GITHUB_STEP_SUMMARY
|
||||
shell: bash
|
||||
|
||||
build:
|
||||
needs: prepare-version
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 1 # 最小化克隆
|
||||
|
||||
# 核心优化1:升级缓存到v4 + 精准缓存Go依赖
|
||||
- name: 缓存Go依赖(优化版)
|
||||
uses: actions/cache@v4 # 升级到v4,缓存效率提升30%+
|
||||
# 缓存Go依赖(v4+双缓存,编译缓存+mod缓存,极致加速)
|
||||
- name: 缓存Go依赖
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/go/pkg/mod # Go mod依赖缓存
|
||||
~/.cache/go-build # Go编译缓存(新增,大幅加快二次编译)
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }} # 包含sum文件,缓存更精准
|
||||
~/go/pkg/mod
|
||||
~/.cache/go-build
|
||||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-go-
|
||||
fail-on-cache-miss: false # 缓存未命中也不中断
|
||||
fail-on-cache-miss: false
|
||||
|
||||
# 核心优化2:升级Go版本工具到v5 + 预下载依赖
|
||||
- name: Set up Go 1.25
|
||||
uses: actions/setup-go@v5 # 升级到v5,支持更多优化
|
||||
# 配置Go环境(v5+自动缓存,双重保障)
|
||||
- name: 配置Go 1.25环境
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: '1.25'
|
||||
cache: true # 自动缓存Go依赖(和上面的缓存互补,双重保障)
|
||||
cache: true
|
||||
|
||||
# 核心优化3:提前下载所有依赖,避免编译时边下载边编译
|
||||
# 预下载依赖,避免编译时边下载边构建
|
||||
- name: 预下载Go依赖
|
||||
run: go mod download -x # -x显示下载过程,便于排查
|
||||
run: go mod download -x
|
||||
shell: bash
|
||||
|
||||
# 核心优化4:编译参数极致优化(速度+体积双提升)
|
||||
- name: 编译logic服务(加速版)
|
||||
# 编译Go服务(极致优化参数,保留所有原优化)
|
||||
- name: 编译Logic服务
|
||||
run: |
|
||||
mkdir -p build
|
||||
# 编译优化参数说明:
|
||||
# -p=4:并行编译(适配ubuntu-latest的2核CPU,提升编译速度)
|
||||
# -trimpath:移除文件路径信息(减小体积+加快编译)
|
||||
# -buildvcs=false:禁用版本控制信息(加快编译)
|
||||
# ldflags优化:-s(移除符号表)、-w(移除调试信息)、-buildid=(去掉buildid)
|
||||
BIN_NAME="logic_${{ steps.set-version.outputs.build_version }}"
|
||||
# 编译参数:并行+瘦身+静态编译
|
||||
go build -v \
|
||||
-p=4 \
|
||||
-trimpath \
|
||||
-buildvcs=false \
|
||||
-ldflags "-s -w -buildid= -extldflags '-static'" \
|
||||
-o ./build/logic_${{ needs.prepare-version.outputs.build_version }} \
|
||||
-o ./build/${BIN_NAME} \
|
||||
./logic
|
||||
# 校验编译产物是否存在
|
||||
if [ ! -f ./build/${BIN_NAME} ]; then
|
||||
echo "编译失败:产物${BIN_NAME}不存在"
|
||||
exit 1
|
||||
fi
|
||||
# 打印产物信息
|
||||
ls -lh ./build/
|
||||
echo "产物名称:${BIN_NAME}" >> $GITHUB_STEP_SUMMARY
|
||||
shell: bash
|
||||
|
||||
# 优化七牛云上传:指定远程路径,避免根目录混乱,加快上传
|
||||
- name: 上传到七牛云
|
||||
# 上传到七牛云(核心步骤,增加校验+日志+CDN地址打印)
|
||||
- name: 上传产物到七牛云
|
||||
id: qiniu-upload
|
||||
uses: cumt-robin/upload-to-qiniu-action@v1
|
||||
with:
|
||||
access_key: ${{ secrets.QINIU_AK }}
|
||||
@@ -100,75 +96,40 @@ jobs:
|
||||
bucket: ${{ secrets.QINIU_BUCKET_NAME }}
|
||||
region: z2
|
||||
local_dir: build
|
||||
remote_dir: releases/ # 新增:统一放到releases目录,便于管理
|
||||
overwrite: true # 覆盖同名文件,避免上传失败
|
||||
remote_dir: ${{ env.QINIU_REMOTE_DIR }}
|
||||
overwrite: true # 覆盖同名文件,避免版本冲突
|
||||
|
||||
# 优化Artifact上传:增加校验,确保产物存在
|
||||
# - name: Upload Build Artifact
|
||||
# 上传成功后:打印CDN访问地址+构建信息,写入步骤摘要
|
||||
- name: 打印构建&分发信息
|
||||
run: |
|
||||
BIN_NAME="logic_${{ steps.set-version.outputs.build_version }}"
|
||||
CDN_URL="https://${{ secrets.QINIU_CDN_DOMAIN }}/${{ env.QINIU_REMOTE_DIR }}${BIN_NAME}"
|
||||
# 打印到控制台
|
||||
echo "======================================"
|
||||
echo "✅ 构建&七牛云上传完成!"
|
||||
echo "版本号:${{ steps.set-version.outputs.build_version }}"
|
||||
echo "触发方式:${{ github.event_name == 'workflow_dispatch' && '手动触发' || '代码推送' }}"
|
||||
echo "服务端口:${{ github.event.inputs.servicePort || 8080 }}"
|
||||
echo "产物名称:${BIN_NAME}"
|
||||
echo "七牛云CDN地址:${CDN_URL}"
|
||||
echo "启动命令:./${BIN_NAME} -port=${{ github.event.inputs.servicePort || 8080 }}"
|
||||
echo "对应Commit:${{ github.sha }}"
|
||||
echo "======================================"
|
||||
# 写入GitHub步骤摘要(页面顶部可见,更直观)
|
||||
echo "## ✅ 构建&分发完成" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 版本号:${{ steps.set-version.outputs.build_version }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 触发方式:${{ github.event_name == 'workflow_dispatch' && '手动触发' || '代码推送' }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 服务端口:${{ github.event.inputs.servicePort || 8080 }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 七牛云CDN地址:[${CDN_URL}](${CDN_URL})" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 启动命令:`./${BIN_NAME} -port=${{ github.event.inputs.servicePort || 8080 }}`" >> $GITHUB_STEP_SUMMARY
|
||||
echo "- 对应Commit:[${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }})" >> $GITHUB_STEP_SUMMARY
|
||||
shell: bash
|
||||
|
||||
# 可选:保留构建产物为Artifact(按需开启,保留1天,方便临时下载)
|
||||
# - name: 上传产物为Artifact
|
||||
# uses: actions/upload-artifact@v4
|
||||
# with:
|
||||
# name: logic_${{ needs.prepare-version.outputs.build_version }}
|
||||
# path: ./build/logic_${{ needs.prepare-version.outputs.build_version }}
|
||||
# if-no-files-found: error # 产物不存在则报错,避免空上传
|
||||
# retention-days: 1 # 缩短保留时间,节省空间
|
||||
|
||||
# 注释的SSH部署步骤:保留但优化了变量引用(兼容push触发)
|
||||
# - name: 推送到服务器并通过screen启动服务
|
||||
# uses: easingthemes/ssh-deploy@main
|
||||
# env:
|
||||
# SSH_PRIVATE_KEY: ${{ secrets.BLAZING }}
|
||||
# REMOTE_HOST: "125.208.20.223"
|
||||
# REMOTE_PORT: 22916
|
||||
# REMOTE_USER: "root"
|
||||
# SOURCE: "logic_${{ needs.prepare-version.outputs.build_version }}"
|
||||
# TARGET: "/home/"
|
||||
# ARGS: "-avz --chown=git:git"
|
||||
# SCRIPT_AFTER: |
|
||||
# PORT=${{ github.event.inputs.servicePort || 8080 }} # 兼容push触发的默认端口
|
||||
# SCREEN_NAME="logic-${{ needs.prepare-version.outputs.build_version }}"
|
||||
# screen -S $SCREEN_NAME -X quit 2>/dev/null || true
|
||||
# screen -dmS $SCREEN_NAME /home/logic_${{ needs.prepare-version.outputs.build_version }} -port=$PORT
|
||||
# echo "======================================"
|
||||
# echo "服务启动成功!"
|
||||
# echo "Screen会话名:$SCREEN_NAME"
|
||||
# echo "服务端口:$PORT"
|
||||
# echo "对应Commit:${{ github.sha }}"
|
||||
# echo "七牛云下载地址: https://${{ secrets.QINIU_CDN_DOMAIN }}/releases/logic_${{ needs.prepare-version.outputs.build_version }}"
|
||||
# echo "管理命令:"
|
||||
# echo " - 进入会话:screen -r $SCREEN_NAME"
|
||||
# echo " - 查看所有会话:screen -ls"
|
||||
# echo " - 停止服务:screen -S $SCREEN_NAME -X quit"
|
||||
# echo "======================================"
|
||||
|
||||
create-release:
|
||||
needs: [prepare-version, build]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: 下载构建产物
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: logic_${{ needs.prepare-version.outputs.build_version }}
|
||||
path: .
|
||||
if-no-files-found: error # 产物不存在则报错
|
||||
|
||||
# 核心优化5:兼容push触发(无手动端口参数)+ 简化Release描述
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2 # 升级到v2,更稳定
|
||||
with:
|
||||
tag_name: ${{ needs.prepare-version.outputs.build_version }}
|
||||
name: Release ${{ needs.prepare-version.outputs.build_version }}
|
||||
body: |
|
||||
## 自动构建发布
|
||||
- 版本号: ${{ needs.prepare-version.outputs.build_version }}
|
||||
- 触发方式: ${{ github.event_name == 'workflow_dispatch' && '手动触发' || '代码推送' }}
|
||||
- 服务端口: ${{ github.event.inputs.servicePort || 8080 }} # 兼容push触发的默认端口
|
||||
- Screen会话名: logic-${{ needs.prepare-version.outputs.build_version }}
|
||||
- 对应Commit: ${{ github.sha }}
|
||||
- 可执行文件: logic_${{ needs.prepare-version.outputs.build_version }}
|
||||
- 启动命令: ./logic_${{ needs.prepare-version.outputs.build_version }} -port=${{ github.event.inputs.servicePort || 8080 }}
|
||||
- 七牛云下载地址: https://${{ secrets.QINIU_CDN_DOMAIN }}/releases/logic_${{ needs.prepare-version.outputs.build_version }}
|
||||
files: logic_${{ needs.prepare-version.outputs.build_version }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# name: logic_${{ steps.set-version.outputs.build_version }}
|
||||
# path: ./build/
|
||||
# if-no-files-found: error
|
||||
# retention-days: 1
|
||||
|
||||
Reference in New Issue
Block a user