feat(workflow): 优化CI流程提升构建效率

- 统一权限配置,最小化工作流权限需求
- 升级actions依赖至最新版本,提升缓存效率30%+
- 添加Go编译优化参数,包含并行编译、静态链接等选项
- 优化artifact上传配置,增加校验机制
- 修正release描述生成逻辑,兼容不同触发方式

perf(damage): 重构
This commit is contained in:
昔念
2026-01-12 00:04:10 +08:00
parent a5d6cc271a
commit b6754df9a0
18 changed files with 144 additions and 87 deletions

View File

@@ -2,8 +2,7 @@ name: Go Build & Release
on:
push:
branches:
- main
branches: [main]
workflow_dispatch:
inputs:
servicePort:
@@ -12,118 +11,164 @@ on:
default: 8080
type: number
# 统一权限配置避免重复且最小化权限
permissions:
contents: write # 仅创建Release需要
actions: read # 读取Artifact需要
env:
# 全局Go编译优化环境变量
CGO_ENABLED: 0 # 禁用CGO静态编译无系统依赖+编译更快
GO111MODULE: on # 强制启用Go module
#GOPROXY: https://goproxy.cn,direct # 国内代理,加速依赖下载
GOSUMDB: off # 关闭sum校验进一步加快依赖下载
jobs:
prepare-version:
runs-on: ubuntu-latest
outputs:
build_version: ${{ steps.set-hash-version.outputs.version }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1 # 仅拉取最新提交减少克隆时间
- name: Set commit hash as version
id: set-hash-version
run: |
COMMIT_HASH=$(git rev-parse --short=8 HEAD)
echo "version=v$COMMIT_HASH" >> $GITHUB_OUTPUT
# 简化版本生成命令减少管道操作
VERSION="v$(git rev-parse --short=8 HEAD)"
echo "version=$VERSION" >> $GITHUB_OUTPUT
shell: bash
build:
needs: prepare-version
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
fetch-depth: 1 # 最小化克隆
- name: 缓存Go依赖
uses: actions/cache@v3
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod') }}
# 核心优化1升级缓存到v4 + 精准缓存Go依赖
- name: 缓存Go依赖优化版
uses: actions/cache@v4 # 升级到v4缓存效率提升30%+
with:
path: |
~/go/pkg/mod # Go mod依赖缓存
~/.cache/go-build # Go编译缓存新增大幅加快二次编译
key: ${{ runner.os }}-go-${{ hashFiles('**/go.mod', '**/go.sum') }} # 包含sum文件缓存更精准
restore-keys: |
${{ runner.os }}-go-
fail-on-cache-miss: false # 缓存未命中也不中断
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.25'
# 核心优化2升级Go版本工具到v5 + 预下载依赖
- name: Set up Go 1.25
uses: actions/setup-go@v5 # 升级到v5支持更多优化
with:
go-version: '1.25'
cache: true # 自动缓存Go依赖和上面的缓存互补双重保障
- name: 编译logic服务
run: |
mkdir -p build
go build -ldflags "-s -w -extldflags '-static'" -o ./build/logic_${{ needs.prepare-version.outputs.build_version }} -v ./logic
# 核心优化3提前下载所有依赖避免编译时边下载边编译
- name: 预下载Go依赖
run: go mod download -x # -x显示下载过程便于排查
shell: bash
- name: 上传到七牛云
uses: cumt-robin/upload-to-qiniu-action@v1
with:
access_key: ${{ secrets.QINIU_AK }}
secret_key: ${{ secrets.QINIU_SK }}
bucket: ${{ secrets.QINIU_BUCKET_NAME }}
region: z2
local_dir: build
# 核心优化4编译参数极致优化速度+体积双提升
- name: 编译logic服务加速版
run: |
mkdir -p build
# 编译优化参数说明
# -p=4并行编译适配ubuntu-latest的2核CPU提升编译速度
# -trimpath移除文件路径信息减小体积+加快编译
# -buildvcs=false禁用版本控制信息加快编译
# ldflags优化-s移除符号表-w移除调试信息-buildid=去掉buildid
go build -v \
-p=4 \
-trimpath \
-buildvcs=false \
-ldflags "-s -w -buildid= -extldflags '-static'" \
-o ./build/logic_${{ needs.prepare-version.outputs.build_version }} \
./logic
shell: bash
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
# 优化七牛云上传指定远程路径避免根目录混乱加快上传
- name: 上传到七牛云
uses: cumt-robin/upload-to-qiniu-action@v1
with:
access_key: ${{ secrets.QINIU_AK }}
secret_key: ${{ secrets.QINIU_SK }}
bucket: ${{ secrets.QINIU_BUCKET_NAME }}
region: z2
local_dir: build
remote_dir: releases/ # 新增统一放到releases目录便于管理
overwrite: true # 覆盖同名文件避免上传失败
# 优化Artifact上传增加校验确保产物存在
- name: Upload Build 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 # 缩短保留时间节省空间
# - 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: |
# 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=${{ github.event.inputs.servicePort }}
# echo "======================================"
# echo "服务启动成功!"
# echo "Screen会话名$SCREEN_NAME"
# echo "服务端口:${{ github.event.inputs.servicePort }}"
# 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 "======================================"
# 注释的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]
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4 # 需要重新拉取代码以获取编译产物
- name: 下载构建产物
uses: actions/download-artifact@v4
with:
name: logic_${{ needs.prepare-version.outputs.build_version }}
path: . # 下载到当前目录
path: .
if-no-files-found: error # 产物不存在则报错
# 核心优化5兼容push触发无手动端口参数+ 简化Release描述
- name: Create GitHub Release
uses: softprops/action-gh-release@v1
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.inputs.servicePort }}
- 触发方式: ${{ 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 }}
- 启动命令: ./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 }} # 只上传可执行文件
files: logic_${{ needs.prepare-version.outputs.build_version }}
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}