#!/usr/bin/env bash # Tsecbench 镜像构建脚本(在 WSL 中执行) # # 用法: # bash tencent/build.sh # 默认构建 tsecbench-agent:latest # IMAGE_NAME=myagent bash tencent/build.sh # 自定义镜像名 # # 前置条件: # - Go 交叉编译已在 Windows 侧完成(tencent/agent-linux-amd64) # 可在 PowerShell 中执行: # $env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0" # go build -trimpath -ldflags="-s -w" -o tencent/agent-linux-amd64 . # - WSL 中已安装 docker # # 流程: # 1. 检查预编译的 Go agent 二进制是否存在 # 2. docker build(构建上下文 = 项目根目录,.dockerignore 排除无关文件) # 3. docker save | gzip 导出到 tencent/agent.tar.gz set -euo pipefail # ---- 配置 ---- PROJECT_ROOT="${PROJECT_ROOT:-/mnt/e/Code/Go/awesomeProject/agent}" IMAGE_NAME="${IMAGE_NAME:-tsecbench-agent}" IMAGE_TAG="${IMAGE_TAG:-latest}" AGENT_BIN="$PROJECT_ROOT/tencent/agent-linux-amd64" echo "==> 项目根目录: $PROJECT_ROOT" echo "==> 镜像名称: $IMAGE_NAME:$IMAGE_TAG" # ---- 1. 检查 Go agent 二进制 ---- echo "==> [1/3] 检查 Go agent 二进制..." if [ ! -f "$AGENT_BIN" ]; then echo " 未找到预编译二进制 $AGENT_BIN" echo " 请先在 PowerShell 中执行交叉编译:" echo ' $env:GOOS="linux"; $env:GOARCH="amd64"; $env:CGO_ENABLED="0"' echo ' go build -trimpath -ldflags="-s -w" -o tencent/agent-linux-amd64 .' exit 1 fi echo " 二进制就绪: $(ls -lh "$AGENT_BIN" | awk '{print $5}')" # ---- 2. docker build ---- # 构建上下文 = 项目根目录,.dockerignore 排除无关文件 # Dockerfile 路径通过 -f 指定 echo "==> [2/3] 构建 Docker 镜像 $IMAGE_NAME:$IMAGE_TAG..." docker build -f "$PROJECT_ROOT/tencent/Dockerfile" -t "$IMAGE_NAME:$IMAGE_TAG" "$PROJECT_ROOT" # ---- 3. 导出镜像 ---- echo "==> [3/3] 导出镜像到 tencent/agent.tar.gz..." OUTPUT="$PROJECT_ROOT/tencent/agent.tar.gz" docker save "$IMAGE_NAME:$IMAGE_TAG" | gzip > "$OUTPUT" echo " 导出完成: $(ls -lh "$OUTPUT" | awk '{print $5}')" echo "" echo "==> 全部完成!" echo " 镜像: $IMAGE_NAME:$IMAGE_TAG" echo " 产物: tencent/agent.tar.gz" echo "" echo "上传到 Tsecbench 平台时直接选择 agent.tar.gz 即可。"