feat(build): 支持 build tag 版本注入并清理历史二进制
- ./run.sh build 仅输出项目根目录 ./aiops,构建前清理 backend/aiops-* - 新增 ./run.sh build tag v1.0.1,通过 ldflags 注入 Version/BuildTime/GitCommit - 支持 ./aiops version 子命令查看编译版本 - 删除误提交的 backend/aiops-cgo,gitignore 忽略 backend/aiops-*
This commit is contained in:
1 parent
1fd9a631e5
commit
8be51ac514
4 files changed
+67
-16
No files matched your search
@@ -19,12 +19,14 @@ backend/vendor/
|
|||||||
|
|
||||||
# Compiled binary
|
# Compiled binary
|
||||||
aiops
|
aiops
|
||||||
|
aiops.bak.*
|
||||||
sqlite3.db
|
sqlite3.db
|
||||||
sqlite3.db-*
|
sqlite3.db-*
|
||||||
redka.db
|
redka.db
|
||||||
redka.db-*
|
redka.db-*
|
||||||
backend/aiops-server
|
backend/aiops-server
|
||||||
backend/aiops
|
backend/aiops
|
||||||
|
backend/aiops-*
|
||||||
backend/data/
|
backend/data/
|
||||||
|
|
||||||
# Config (keep backend/config.yaml as default)
|
# Config (keep backend/config.yaml as default)
|
||||||
|
|||||||
Binary file not shown.
+18
-4
@@ -83,16 +83,30 @@ var (
|
|||||||
// @name Authorization
|
// @name Authorization
|
||||||
// @description Type "Bearer" followed by a space and JWT token.
|
// @description Type "Bearer" followed by a space and JWT token.
|
||||||
|
|
||||||
|
// printVersion 输出编译时注入的版本信息 // Logan.Li
|
||||||
|
func printVersion() {
|
||||||
|
fmt.Printf("AIOps 智能运维平台\n")
|
||||||
|
fmt.Printf(" 版本: %s\n", Version)
|
||||||
|
fmt.Printf(" 构建: %s\n", BuildTime)
|
||||||
|
fmt.Printf(" 提交: %s\n", GitCommit)
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
// 支持 ./aiops version 子命令(无需启动服务)// Logan.Li
|
||||||
|
if len(os.Args) > 1 {
|
||||||
|
switch os.Args[1] {
|
||||||
|
case "version", "-v", "--version":
|
||||||
|
printVersion()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 解析 CLI 参数 // Logan.Li
|
// 解析 CLI 参数 // Logan.Li
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
// 显示版本信息 // Logan.Li
|
// 显示版本信息 // Logan.Li
|
||||||
if *flagVersion {
|
if *flagVersion {
|
||||||
fmt.Printf("AIOps 智能运维平台\n")
|
printVersion()
|
||||||
fmt.Printf(" 版本: %s\n", Version)
|
|
||||||
fmt.Printf(" 构建: %s\n", BuildTime)
|
|
||||||
fmt.Printf(" 提交: %s\n", GitCommit)
|
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -319,6 +319,7 @@ clean_go_artifacts() {
|
|||||||
rm -f "$STANDALONE_BIN_PATH"
|
rm -f "$STANDALONE_BIN_PATH"
|
||||||
rm -f "$SCRIPT_DIR/$BACKEND_DIR/$STANDALONE_BIN"
|
rm -f "$SCRIPT_DIR/$BACKEND_DIR/$STANDALONE_BIN"
|
||||||
rm -f "$SCRIPT_DIR/$BACKEND_DIR/$BACKEND_BIN"
|
rm -f "$SCRIPT_DIR/$BACKEND_DIR/$BACKEND_BIN"
|
||||||
|
rm -f "$SCRIPT_DIR/$BACKEND_DIR"/aiops-*
|
||||||
}
|
}
|
||||||
|
|
||||||
# 构建前端并同步到 backend/static(二进制 / embed 镜像共用)// Logan.Li
|
# 构建前端并同步到 backend/static(二进制 / embed 镜像共用)// Logan.Li
|
||||||
@@ -432,23 +433,43 @@ ensure_go_path() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 编译独立二进制(含 embed 前端)// Logan.Li
|
# 解析编译版本号(显式 tag 优先,否则取 git describe)// Logan.Li
|
||||||
|
resolve_build_version() {
|
||||||
|
local explicit="${1:-}"
|
||||||
|
if [ -n "$explicit" ]; then
|
||||||
|
BUILD_VERSION="$explicit"
|
||||||
|
elif git describe --tags --always --dirty 2>/dev/null | grep -q .; then
|
||||||
|
BUILD_VERSION=$(git describe --tags --always --dirty 2>/dev/null)
|
||||||
|
else
|
||||||
|
BUILD_VERSION="dev"
|
||||||
|
fi
|
||||||
|
BUILD_TIME=$(date -u '+%Y-%m-%dT%H:%M:%SZ')
|
||||||
|
GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")
|
||||||
|
}
|
||||||
|
|
||||||
|
# 编译独立二进制(含 embed 前端,输出到项目根目录 ./aiops)// Logan.Li
|
||||||
build_standalone_binary() {
|
build_standalone_binary() {
|
||||||
|
local version_tag="${1:-}"
|
||||||
ensure_go_path || return 1
|
ensure_go_path || return 1
|
||||||
build_frontend_embed
|
build_frontend_embed
|
||||||
ensure_binary_config
|
ensure_binary_config
|
||||||
clean_go_artifacts
|
clean_go_artifacts
|
||||||
|
resolve_build_version "$version_tag"
|
||||||
cd "$SCRIPT_DIR/$BACKEND_DIR"
|
cd "$SCRIPT_DIR/$BACKEND_DIR"
|
||||||
info "编译中..."
|
info "编译中 (version=$BUILD_VERSION)..."
|
||||||
|
local ldflags="-w -s"
|
||||||
|
ldflags+=" -X main.Version=${BUILD_VERSION}"
|
||||||
|
ldflags+=" -X main.BuildTime=${BUILD_TIME}"
|
||||||
|
ldflags+=" -X main.GitCommit=${GIT_COMMIT}"
|
||||||
CGO_ENABLED=1 GOPROXY=https://goproxy.cn,direct GONOSUMCHECK='*' GOTOOLCHAIN=go1.24.0 \
|
CGO_ENABLED=1 GOPROXY=https://goproxy.cn,direct GONOSUMCHECK='*' GOTOOLCHAIN=go1.24.0 \
|
||||||
go build -ldflags="-w -s" -o "$STANDALONE_BIN_PATH" .
|
go build -ldflags="$ldflags" -o "$STANDALONE_BIN_PATH" .
|
||||||
if [ ! -f "$STANDALONE_BIN_PATH" ]; then
|
if [ ! -f "$STANDALONE_BIN_PATH" ]; then
|
||||||
error "编译失败"
|
error "编译失败"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
local bin_size
|
local bin_size
|
||||||
bin_size=$(du -h "$STANDALONE_BIN_PATH" | cut -f1)
|
bin_size=$(du -h "$STANDALONE_BIN_PATH" | cut -f1)
|
||||||
success "编译完成: ./$STANDALONE_BIN ($bin_size)"
|
success "编译完成: ./$STANDALONE_BIN ($bin_size, $BUILD_VERSION)"
|
||||||
cd "$SCRIPT_DIR"
|
cd "$SCRIPT_DIR"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -698,10 +719,22 @@ cmd_build() {
|
|||||||
build_standalone_binary || exit 1
|
build_standalone_binary || exit 1
|
||||||
echo ""
|
echo ""
|
||||||
info "使用方法:"
|
info "使用方法:"
|
||||||
echo " ./run.sh binary upgrade # 停服重编译并后台启动"
|
echo " ./$STANDALONE_BIN version # 查看版本"
|
||||||
echo " ./$STANDALONE_BIN --port 8080 # 前台启动"
|
echo " ./run.sh binary upgrade # 停服重编译并后台启动"
|
||||||
echo " ./$STANDALONE_BIN --mode local # 本地模式 (SQLite + redka)"
|
echo " ./$STANDALONE_BIN --port 8080 # 前台启动"
|
||||||
echo " ./$STANDALONE_BIN --config config.yaml # 使用配置文件"
|
echo " ./$STANDALONE_BIN --mode local # 本地模式 (SQLite + redka)"
|
||||||
|
echo " ./$STANDALONE_BIN --config config.yaml # 使用配置文件"
|
||||||
|
;;
|
||||||
|
tag)
|
||||||
|
local version_tag=${2:-}
|
||||||
|
if [ -z "$version_tag" ]; then
|
||||||
|
error "请指定版本号,例如: ./run.sh build tag v1.0.1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
banner "========== 编译独立二进制 ($version_tag) =========="
|
||||||
|
build_standalone_binary "$version_tag" || exit 1
|
||||||
|
echo ""
|
||||||
|
success "版本已写入二进制,验证: ./$STANDALONE_BIN version"
|
||||||
;;
|
;;
|
||||||
agent)
|
agent)
|
||||||
banner "========== 编译 Agent =========="
|
banner "========== 编译 Agent =========="
|
||||||
@@ -729,9 +762,10 @@ cmd_build() {
|
|||||||
;;
|
;;
|
||||||
help|--help|-h)
|
help|--help|-h)
|
||||||
echo "编译命令:"
|
echo "编译命令:"
|
||||||
echo " ./run.sh build 编译独立二进制 aiops (默认 SQLite)"
|
echo " ./run.sh build 编译独立二进制 ./aiops (输出到项目根目录)"
|
||||||
echo " ./run.sh build agent 交叉编译 Agent (amd64+arm64)"
|
echo " ./run.sh build tag v1.0.1 指定版本号编译 (./aiops version 可查看)"
|
||||||
echo " ./run.sh build frontend 构建前端生产包"
|
echo " ./run.sh build agent 交叉编译 Agent (amd64+arm64)"
|
||||||
|
echo " ./run.sh build frontend 构建前端生产包"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
error "未知构建目标: $target"
|
error "未知构建目标: $target"
|
||||||
@@ -1208,7 +1242,8 @@ cmd_help() {
|
|||||||
echo " ./run.sh kubernetes build 仅构建 embed 镜像"
|
echo " ./run.sh kubernetes build 仅构建 embed 镜像"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${YELLOW}编译 & 独立二进制${NC}"
|
echo -e " ${YELLOW}编译 & 独立二进制${NC}"
|
||||||
echo " ./run.sh build 编译独立二进制 ./$STANDALONE_BIN"
|
echo " ./run.sh build 编译独立二进制 ./$STANDALONE_BIN (仅根目录)"
|
||||||
|
echo " ./run.sh build tag v1.0.1 指定版本号编译"
|
||||||
echo " ./run.sh binary upgrade 停服→清旧→重编译→后台启动(生产升级)"
|
echo " ./run.sh binary upgrade 停服→清旧→重编译→后台启动(生产升级)"
|
||||||
echo " ./run.sh binary start|stop|status 进程管理"
|
echo " ./run.sh binary start|stop|status 进程管理"
|
||||||
echo " ./run.sh binary [args] 前台启动(调试)"
|
echo " ./run.sh binary [args] 前台启动(调试)"
|
||||||
|
|||||||
Reference in new issue
Block a user