#!/bin/bash set -e # 颜色定义 GREEN='\033[0;32m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # No Color log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 显示帮助信息 show_help() { echo "Argus-Metric Artifact 发布脚本" echo echo "用法: $0 <版本号>" echo echo "参数:" echo " <版本号> 要发布的版本号,对应 artifact 目录中的版本" echo echo "示例:" echo " $0 1.20.0 # 发布 1.20.0 版本" echo } # 检查参数 if [[ $# -ne 1 ]]; then log_error "请提供版本号参数" show_help exit 1 fi VERSION="$1" ARTIFACT_DIR="artifact/$VERSION" PUBLISH_DIR="/Users/sundapeng/Project/nlp/aiops/client-plugins/all-in-one/publish/" # 检查版本目录是否存在 if [[ ! -d "$ARTIFACT_DIR" ]]; then log_error "版本目录不存在: $ARTIFACT_DIR" exit 1 fi log_info "开始发布版本: $VERSION" # 确保发布目录存在 log_info "确保发布目录存在: $PUBLISH_DIR" mkdir -p "$PUBLISH_DIR" # 创建临时目录用于打包 TEMP_PACKAGE_DIR="/tmp/argus-metric-package-$$" mkdir -p "$TEMP_PACKAGE_DIR" # 复制所有 tar.gz 文件到临时目录 log_info "准备 artifact 文件..." tar_files=$(find "$ARTIFACT_DIR" -name "*.tar.gz" -type f) if [[ -z "$tar_files" ]]; then log_error "在 $ARTIFACT_DIR 中未找到 tar.gz 文件" exit 1 fi for file in $tar_files; do filename=$(basename "$file") log_info " 准备: $filename" cp "$file" "$TEMP_PACKAGE_DIR/" done # 复制版本信息文件 if [[ -f "$ARTIFACT_DIR/version.json" ]]; then log_info "复制版本信息文件..." cp "$ARTIFACT_DIR/version.json" "$TEMP_PACKAGE_DIR/" fi # 复制健康检查脚本 if [[ -f "$ARTIFACT_DIR/check_health.sh" ]]; then log_info "复制健康检查脚本..." cp "$ARTIFACT_DIR/check_health.sh" "$TEMP_PACKAGE_DIR/" elif [[ -f "scripts/check_health.sh" ]]; then log_info "复制健康检查脚本 (从当前目录)..." cp "scripts/check_health.sh" "$TEMP_PACKAGE_DIR/" else log_warning "未找到 check_health.sh 文件" fi # 复制安装脚本并重命名为 install.sh if [[ -f "scripts/install_artifact.sh" ]]; then log_info "复制安装脚本..." cp "scripts/install_artifact.sh" "$TEMP_PACKAGE_DIR/install.sh" fi if [[ -f "scripts/uninstall_artifact.sh" ]]; then log_info "复制卸载脚本..." cp "scripts/uninstall_artifact.sh" "$TEMP_PACKAGE_DIR/uninstall.sh" fi # 复制 deps 目录 if [[ -d "$ARTIFACT_DIR/deps" ]]; then log_info "复制系统依赖包..." cp -r "$ARTIFACT_DIR/deps" "$TEMP_PACKAGE_DIR/" log_success "系统依赖包复制完成" fi # 创建tar包,使用新的命名规范 TAR_NAME="argus-metric_$(echo $VERSION | tr '.' '_').tar.gz" log_info "创建发布包: $TAR_NAME" cd "$TEMP_PACKAGE_DIR" tar -czf "$PUBLISH_DIR/$TAR_NAME" * cd - > /dev/null # 清理临时目录 rm -rf "$TEMP_PACKAGE_DIR" # 更新 LATEST_VERSION 文件 log_info "更新 LATEST_VERSION 文件..." echo "$VERSION" > "$PUBLISH_DIR/LATEST_VERSION" # 复制 setup.sh 到发布目录 if [[ -f "scripts/setup.sh" ]]; then log_info "复制 setup.sh 到发布目录..." cp "scripts/setup.sh" "$PUBLISH_DIR/" fi # 显示发布结果 log_success "版本 $VERSION 发布完成!" echo echo "发布目录: $PUBLISH_DIR" echo "发布包: $PUBLISH_DIR/$TAR_NAME" echo "包大小: $(du -h "$PUBLISH_DIR/$TAR_NAME" | cut -f1)" echo "最新版本: $(cat "$PUBLISH_DIR/LATEST_VERSION")" echo echo "发布目录中的文件:" ls -la "$PUBLISH_DIR" | while read line; do echo " $line" done echo echo "使用方法:" echo " 1. 确保 /srv/ftp/share 目录可通过 FTP 访问" echo " 2. 用户首先下载安装脚本:" echo " curl -u ftpuser:admin1234 ftp://10.211.55.4/setup.sh -o setup.sh" echo " 3. 然后执行安装 (自动获取最新版本):" echo " sudo sh setup.sh" echo " 4. 或者指定版本安装:" echo " sudo sh setup.sh --version $VERSION" echo " 5. 或者指定不同的FTP服务器:" echo " sudo sh setup.sh --server 192.168.1.100 --user myuser --password mypass"