feat: 飞牛NAS成本审核更新 - 新增SKU、更新价格表、清理归档及订单记录,同步auto-check改动
This commit is contained in:
@@ -1,26 +1,36 @@
|
||||
# 压力测试工具镜像
|
||||
#
|
||||
# 用途:为 auto-check 提供预装压测工具的容器环境
|
||||
# 优势:工具预装在镜像中,无需在线安装,环境一致性好,适合国内网络环境
|
||||
# 用途:为 auto-check 提供预装压测工具与脚本的容器环境
|
||||
# 优势:工具预装在镜像中,无需在目标机在线安装,环境一致性好
|
||||
#
|
||||
# 工作流程:
|
||||
# 工作流程(固定分发模式,不依赖 registry):
|
||||
# 1. auto-check 检测目标机器的 Docker 可用性
|
||||
# 2. 从 Registry 拉取镜像(或本地已存在则跳过)
|
||||
# 3. 启动容器执行测试(脚本已打包在镜像中)
|
||||
# 2. 目标机无镜像时,上传工程目录中导出的 tar(docker save)并 docker load
|
||||
# 3. 启动容器执行测试(脚本已打包在镜像中,挂载 /sys 采集温度)
|
||||
# 4. 收集测试结果并解析
|
||||
#
|
||||
# 构建命令:
|
||||
# 构建与导出(推荐用脚本,自动时间戳 tag):
|
||||
# cd docker/stress-test
|
||||
# docker build -t your-registry/stress-test:latest .
|
||||
# docker push your-registry/stress-test:latest
|
||||
# ./build.sh # 自动用当前时间戳打 tag
|
||||
# ./build.sh 20260824-153045 # 或手动指定
|
||||
# 脚本会同时:构建镜像(时间戳 tag) + 导出 tar + 同步 auto-check.yaml 配置
|
||||
#
|
||||
# 手动构建(如绕过脚本):
|
||||
# cd docker/stress-test
|
||||
# docker build -t stress-test:<时间戳> .
|
||||
# docker save -o stress-test.tar stress-test:<时间戳>
|
||||
# # 同步修改 ../../auto-check.yaml 的 docker_image
|
||||
#
|
||||
# 使用方式(在 auto-check.yaml 中配置):
|
||||
# stress:
|
||||
# use_docker: true
|
||||
# docker_image: "your-registry/stress-test:latest"
|
||||
# docker_image: "stress-test:<时间戳>"
|
||||
# docker_tar: "docker/stress-test/stress-test.tar"
|
||||
|
||||
FROM debian:12-slim
|
||||
|
||||
# UTF-8 locale:保证 sensors 输出带 ° 符号的温度格式(脚本正则依赖)
|
||||
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
|
||||
|
||||
# 清理缓存,减少镜像体积
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
stress-ng \
|
||||
|
||||
@@ -29,20 +29,52 @@
|
||||
固定分发模式:不依赖 registry,镜像以 tar 文件形式放在工程目录,
|
||||
目标机无镜像时由 auto-check 自动上传并 `docker load`。
|
||||
|
||||
### 推荐:使用构建脚本(自动时间戳 tag)
|
||||
|
||||
`build.sh` 会以 `YYYYMMDD-HHMMSS` 格式自动生成时间戳 tag(如 `stress-test:20260824-153045`),
|
||||
便于在 `docker images` 中一眼区分新旧版本。脚本会同时:
|
||||
|
||||
1. 用时间戳 tag 构建镜像(**不再保留 `latest`**)
|
||||
2. 导出两份 tar:带时间戳的归档 + 同步覆盖 `stress-test.tar`(auto-check 默认引用)
|
||||
3. 自动更新 `auto-check.yaml` 的 `docker_image` 字段,确保配置与新 tag 同步
|
||||
|
||||
```bash
|
||||
cd docker/stress-test
|
||||
docker build -t stress-test:latest .
|
||||
# 导出到工程目录(供 auto-check 上传分发,已加入 .gitignore)
|
||||
docker save -o stress-test.tar stress-test:latest
|
||||
./build.sh # 自动取当前时间戳
|
||||
./build.sh 20260824-153045 # 手动指定时间戳(重打/复现)
|
||||
```
|
||||
|
||||
产物:
|
||||
|
||||
| 文件 | 用途 |
|
||||
|------|------|
|
||||
| 镜像 `stress-test:<时间戳>` | 唯一 tag,`docker images` 可看到每次构建 |
|
||||
| Tar `stress-test-<时间戳>.tar` | 带时间戳归档,保留历史版本 |
|
||||
| Tar `stress-test.tar` | auto-check 默认引用,脚本自动覆盖为最新 |
|
||||
| `auto-check.yaml` | `docker_image` 自动同步为新 tag |
|
||||
|
||||
> 旧时间戳镜像可手动 `docker rmi stress-test:<旧时间戳>` 清理。
|
||||
|
||||
### 手动构建(不推荐)
|
||||
|
||||
如需绕过脚本手动构建,必须自行同步 `auto-check.yaml`:
|
||||
|
||||
```bash
|
||||
cd docker/stress-test
|
||||
docker build -t stress-test:20260824-153045 . # 必须带时间戳
|
||||
docker save -o stress-test.tar stress-test:20260824-153045
|
||||
# 然后编辑 ../../auto-check.yaml,把 docker_image 改成新 tag
|
||||
```
|
||||
|
||||
> 注意:手动构建如忘记带时间戳,重复构建后会丢失版本信息,调试时易混淆。
|
||||
|
||||
## 使用
|
||||
|
||||
在 `auto-check.yaml` 中配置:
|
||||
在 `auto-check.yaml` 中配置(`docker_image` 由 `build.sh` 自动维护):
|
||||
|
||||
```yaml
|
||||
stress:
|
||||
docker_image: "stress-test:latest"
|
||||
docker_image: "stress-test:20260824-153045" # 每次构建自动更新为新时间戳
|
||||
docker_tar: "docker/stress-test/stress-test.tar"
|
||||
docker_args: "--network=host --privileged"
|
||||
```
|
||||
@@ -68,7 +100,16 @@ stress:
|
||||
2. 温度监控后台采样(`temp_start.sh`)
|
||||
3. 各项压测:先单项(cpu/memory/disk/memnative)、综合(full)最后
|
||||
4. 温度监控收尾(`===MONITOR:temp===`)
|
||||
5. 内核日志(`===MONITOR:dmesg===`)+ 结束标记
|
||||
5. 内核日志(`===MONITOR:dmesg===`,`-T` 带时间戳)+ 结束标记
|
||||
|
||||
## 容器运行时挂载(由 auto-check 自动添加)
|
||||
|
||||
| 挂载 | 作用 |
|
||||
|------|------|
|
||||
| `-v /sys:/sys:ro` | 容器内是独立 sysfs,挂载后才能读到宿主机硬件传感器(温度采集依赖此项) |
|
||||
| `-v /etc/localtime:/etc/localtime:ro` | 容器时区与宿主机一致,dmesg 时间戳与采样时间才准确 |
|
||||
|
||||
> 注意:镜像内已设置 `LC_ALL=C.UTF-8`。若 locale 为纯 C,`sensors` 会输出 "+51.0 C"(无 ° 符号),导致温度正则失配、采集不到数据。
|
||||
|
||||
## 镜像内容
|
||||
|
||||
|
||||
78
auto-check/docker/stress-test/build.sh
Normal file
78
auto-check/docker/stress-test/build.sh
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env bash
|
||||
# build.sh - 构建压测镜像并以时间戳打 tag
|
||||
#
|
||||
# 目的:每次构建都生成唯一 tag(如 stress-test:20260824-153045),
|
||||
# 便于在 docker images 中区分新旧版本,避免 latest 重复构建后无法追溯。
|
||||
#
|
||||
# 用法:
|
||||
# ./build.sh # 自动使用当前时间戳 (YYYYMMDD-HHMMSS)
|
||||
# ./build.sh 20260824-153045 # 手动指定时间戳(用于复现/重打)
|
||||
#
|
||||
# 产物:
|
||||
# - 镜像: stress-test:<timestamp> (仅时间戳 tag,不再保留 latest)
|
||||
# - Tar : stress-test-<timestamp>.tar (带时间戳归档)
|
||||
# + stress-test.tar (auto-check 默认引用,同步覆盖)
|
||||
# - auto-check.yaml 的 docker_image 字段会被自动同步为新时间戳 tag
|
||||
#
|
||||
# 注意:
|
||||
# - 脚本会自动 cd 到自身所在目录,可从任意位置调用
|
||||
# - 需要本地有 Docker 可用
|
||||
# - 每次构建会覆盖上一份 stress-test.tar;时间戳 tar 保留可作历史归档
|
||||
# - 旧时间戳镜像可执行 docker rmi stress-test:<old-ts> 清理
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# 切到脚本所在目录(Dockerfile 在这里)
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# 时间戳:支持外部传入,否则取当前时间
|
||||
TS="${1:-$(date +%Y%m%d-%H%M%S)}"
|
||||
|
||||
IMAGE_NAME="stress-test"
|
||||
TAG_TS="${IMAGE_NAME}:${TS}"
|
||||
TAR_TS="${IMAGE_NAME}-${TS}.tar"
|
||||
TAR_LATEST="${IMAGE_NAME}.tar"
|
||||
|
||||
# auto-check.yaml 路径(相对本脚本 ../..)
|
||||
YAML_FILE="$SCRIPT_DIR/../../auto-check.yaml"
|
||||
|
||||
echo "==> 时间戳: ${TS}"
|
||||
echo "==> 构建镜像: ${TAG_TS}"
|
||||
docker build -t "${TAG_TS}" .
|
||||
|
||||
echo "==> 导出 Tar: ${TAR_TS}"
|
||||
docker save -o "${TAR_TS}" "${TAG_TS}"
|
||||
|
||||
echo "==> 同步 Latest Tar: ${TAR_LATEST}"
|
||||
cp -f "${TAR_TS}" "${TAR_LATEST}"
|
||||
|
||||
# 同步 auto-check.yaml 中的 docker_image 为新时间戳 tag
|
||||
if [ -f "$YAML_FILE" ]; then
|
||||
if grep -q '^[[:space:]]*docker_image:' "$YAML_FILE"; then
|
||||
if ! grep -q "${TAG_TS}" "$YAML_FILE"; then
|
||||
# -i.bak 同时生成备份(兼容 GNU sed / BSD sed),改完再删
|
||||
sed -i.bak -E "s|(docker_image:[[:space:]]*\")[^\"]+(\")|\1${TAG_TS}\2|" "$YAML_FILE"
|
||||
rm -f "${YAML_FILE}.bak"
|
||||
echo "==> 已更新 ${YAML_FILE##*/}: docker_image -> ${TAG_TS}"
|
||||
else
|
||||
echo "==> ${YAML_FILE##*/} 中 docker_image 已是 ${TAG_TS},跳过"
|
||||
fi
|
||||
else
|
||||
echo "==> 未在 ${YAML_FILE##*/} 中找到 docker_image 字段,请手动更新"
|
||||
fi
|
||||
else
|
||||
echo "==> 未找到 ${YAML_FILE},请手动确保 docker_image 与新 tag 一致"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo " 构建完成"
|
||||
echo "=========================================="
|
||||
echo " 镜像 Tag: ${TAG_TS}"
|
||||
echo " Tar 文件: ${TAR_TS}"
|
||||
echo " ${TAR_LATEST} (auto-check 默认引用)"
|
||||
echo ""
|
||||
echo "==> 本机 ${IMAGE_NAME} 镜像列表:"
|
||||
docker images "${IMAGE_NAME}" --format "table {{.Repository}}\t{{.Tag}}\t{{.CreatedAt}}\t{{.Size}}"
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
echo '===MONITOR:dmesg==='
|
||||
DMESG_ERR=$(dmesg --level=err,crit,alert,emerg 2>/dev/null | tail -30 || true)
|
||||
# -T 输出人类可读时间戳(如 [Mon Aug 24 10:23:45 2026]),
|
||||
# 依赖挂载宿主机 /etc/localtime 保证时区正确;老内核不支持 -T 时回退
|
||||
DMESG_ERR=$(dmesg -T --level=err,crit,alert,emerg 2>/dev/null | tail -30)
|
||||
if [ -z "$DMESG_ERR" ]; then
|
||||
DMESG_ERR=$(dmesg --level=err,crit,alert,emerg 2>/dev/null | tail -30 || true)
|
||||
fi
|
||||
if [ -n "$DMESG_ERR" ]; then
|
||||
echo 'status:fail'
|
||||
echo "output:${DMESG_ERR}"
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
# 系统信息 → 温度监控启动 → 各项压测(先单项、后综合)→ 温度监控收尾 → 内核日志
|
||||
set -e
|
||||
|
||||
# 统一 UTF-8 locale:否则 sensors 输出 "+51.0 C"(无 ° 符号),
|
||||
# 脚本中 (?=°C) 的温度正则会全部失配,导致温度采集不到
|
||||
export LC_ALL=C.UTF-8
|
||||
export LANG=C.UTF-8
|
||||
|
||||
# 默认值(docker -e 传入时覆盖)
|
||||
export AUTOCHECK_TYPES="${AUTOCHECK_TYPES:-cpu,memory}"
|
||||
export AUTOCHECK_DURATION="${AUTOCHECK_DURATION:-30}"
|
||||
|
||||
Reference in New Issue
Block a user