##!/bin/bash# 定义颜色用于日志输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color# 检查参数 if [ -z "$1" ]; thenecho -e "${RED}错误: 未传入分支号!${NC}"echo "用法: $0 <分支号>"exit 1 fi# 读取分支号 BRANCH="$1" IMAGE_NAME="lcs2:${BRANCH}" # 镜像名称 CONTAINER_NAME="lcs2_build_temp" # 临时容器名称 OUTPUT_FILE="projects/container.tar.gz" # 文件在容器中的路径# 获取当前日期并格式化 DATE=$(date +"%Y%m%d-%H%M%S") LOCAL_OUTPUT="container.tar.gz" # 保持原文件名# 创建临时 Dockerfile,动态传递 BRANCH echo -e "${YELLOW}创建动态 Dockerfile...${NC}" cat > Dockerfile.temp <<EOF FROM git.libsaas.repo/dbase/java8build:latest ENV LANG=C.UTF-8 ARG BRANCH=$BRANCH RUN ulimit -n 65536 && \\ wget --no-check-certificate https:/机器/lcs/lcs2-all/raw/branch/\$BRANCH/build/build_lcs2.sh && \\chmod +x ./build_lcs2.sh && \\./build_lcs2.sh \$BRANCH EOF# 清理临时容器 echo -e "${YELLOW}清理临时容器...${NC}" if ! nerdctl rm -f "$CONTAINER_NAME"; thenecho -e "${RED}清理容器失败!${NC}"exit 1 fi# 构建镜像 echo -e "${YELLOW}开始构建镜像: ${IMAGE_NAME}${NC}" if ! nerdctl build --no-cache -t "$IMAGE_NAME" -f Dockerfile.temp .; thenecho -e "${RED}镜像构建失败!${NC}"rm -f Dockerfile.tempexit 1 fi rm -f Dockerfile.temp# 创建并启动容器 echo -e "${YELLOW}创建并启动临时容器...${NC}" if ! nerdctl run --name "$CONTAINER_NAME" -d "$IMAGE_NAME"; thenecho -e "${RED}容器创建并启动失败!${NC}"exit 1 fi# 提取文件 echo -e "${YELLOW}提取文件 ${OUTPUT_FILE} 到本地...${NC}" if ! nerdctl cp "${CONTAINER_NAME}:${OUTPUT_FILE}" "./${LOCAL_OUTPUT}"; thenecho -e "${RED}文件提取失败!请检查路径或容器状态。${NC}"exit 1 fi# 获取当前日期并格式化 DATE=$(date +"%Y%m%d-%H%M%S") RENAME_FILE="${DATE}-${BRANCH}-container.tar.gz" # 重命名文件为当前日期时间# 重命名文件 echo -e "${YELLOW}重命名文件 ${LOCAL_OUTPUT} 为 ${RENAME_FILE}...${NC}" mv "${LOCAL_OUTPUT}" "${RENAME_FILE}"# 解压文件 echo -e "${YELLOW}解压文件 ${RENAME_FILE}...${NC}" if ! tar -zxvf "${RENAME_FILE}"; thenecho -e "${RED}解压失败!${NC}"exit 1 fi# 上传文件夹到远程服务器 REMOTE_DIR="/home/node/lcs2/container/" # 目标服务器的目录 HOST="192.168.1.235" USER="node" PASSWORD="flyread"# 备份远程服务器目录 /home/node/lcs2/container/ 排除 logs 文件夹 echo -e "${YELLOW}备份远程目录 /home/node/lcs2/container/ 排除 logs 文件夹...${NC}"# 在远程服务器上备份 /home/node/lcs2/container/ 并排除 logs 文件夹 BACKUP_FILE="/home/node/node/lcs2-bak/${DATE}-${BRANCH}-container-backup.tar.gz"echo -e "${YELLOW}在远程服务器上备份目录 /home/node/lcs2/container/...${NC}" sshpass -p "$PASSWORD" ssh $USER@$HOST "tar --exclude='logs' -czvf ${BACKUP_FILE} -C /home/node/lcs2/container/ ."if [ $? -eq 0 ]; thenecho -e "${GREEN}远程目录备份成功,已保存为 ${BACKUP_FILE}${NC}" elseecho -e "${RED}远程备份失败!${NC}"exit 1 fiecho -e "${YELLOW}上传文件夹 container/workspace 和 Version-build* 到远程服务器...${NC}"# 使用 sshpass 上传 `container/workspace` 和 `Version-build*` if ! sshpass -p "$PASSWORD" scp -r container/modules "$USER@$HOST:$REMOTE_DIR"; thenecho -e "${RED}上传 container/modules 失败!${NC}"exit 1 fiif ! sshpass -p "$PASSWORD" scp -r container/lib "$USER@$HOST:$REMOTE_DIR"; thenecho -e "${RED}上传 container/lib 失败!${NC}"exit 1 fiif ! sshpass -p "$PASSWORD" scp -r container/Version-build* "$USER@$HOST:$REMOTE_DIR"; thenecho -e "${RED}上传 Version-build* 文件失败!${NC}"exit 1 fi# 成功提示 echo -e "${GREEN}文件上传成功!${NC}"# 执行远程命令 echo -e "${YELLOW}执行远程命令: node.sh -i container -s...${NC}" if ! sshpass -p 'flyread' ssh node@192.168.1.235 'cd /home/node/lcs2/container/ && ./stop.sh'; thenecho -e "${RED}执行/home/node/lcs2/container/stop.sh 失败!${NC}"exit 1 fiecho -e "${YELLOW}执行远程命令: node.sh -i container start...${NC}" if ! sshpass -p 'flyread' ssh node@192.168.1.235 'cd /home/node/lcs2/container/ && ./start.sh'; thenecho -e "${RED}执行 /home/node/lcs2/container/start.sh 失败!${NC}"exit 1 fi# 清理临时容器 #nerdctl rm -f "$CONTAINER_NAME"
#!/bin/bash# 定义颜色用于日志输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color# 检查参数 if [ -z "$1" ]; thenecho -e "${RED}错误: 未传入分支号!${NC}"echo "用法: $0 <分支号>"exit 1 fi# 读取分支号 BRANCH="$1" IMAGE_NAME="lcs1:${BRANCH}" # 镜像名称 CONTAINER_NAME="lcs1_build_temp" # 临时容器名称 OUTPUT_FILE="projects/template.tar.gz" # 文件在容器中的路径# 获取当前日期并格式化 DATE=$(date +"%Y%m%d-%H%M%S") LOCAL_OUTPUT="template.tar.gz" # 保持原文件名# 创建临时 Dockerfile,动态传递 BRANCH echo -e "${YELLOW}创建动态 Dockerfile...${NC}" cat > Dockerfile.temp <<EOF FROM git.libsaas.repo/dbase/java8build:latest ENV LANG=C.UTF-8 ARG BRANCH=$BRANCH RUN ulimit -n 65536 && \\ wget --no-check-certificate https://机器/lcs/lcs1-all/raw/branch/\$BRANCH/build/build_lcs1.sh && \\chmod +x ./build_lcs1.sh && \\./build_lcs1.sh \$BRANCH EOF# 清理临时容器 echo -e "${YELLOW}清理临时容器...${NC}" if ! nerdctl rm -f "$CONTAINER_NAME"; thenecho -e "${RED}清理容器失败!${NC}"exit 1 fi# 构建镜像 echo -e "${YELLOW}开始构建镜像: ${IMAGE_NAME}${NC}" if ! nerdctl build --no-cache -t "$IMAGE_NAME" -f Dockerfile.temp .; thenecho -e "${RED}镜像构建失败!${NC}"rm -f Dockerfile.tempexit 1 fi rm -f Dockerfile.temp# 创建并启动容器 echo -e "${YELLOW}创建并启动临时容器...${NC}" if ! nerdctl create --name "$CONTAINER_NAME" "$IMAGE_NAME" /bin/bash; thenecho -e "${RED}容器创建失败!${NC}"exit 1 fiif ! nerdctl start "$CONTAINER_NAME"; thenecho -e "${RED}容器启动失败!${NC}"nerdctl rm -f "$CONTAINER_NAME"exit 1 fi# 提取文件 echo -e "${YELLOW}提取文件 ${OUTPUT_FILE} 到本地...${NC}" if ! nerdctl cp "${CONTAINER_NAME}:${OUTPUT_FILE}" "./${LOCAL_OUTPUT}"; thenecho -e "${RED}文件提取失败!请检查路径或容器状态。${NC}"nerdctl rm -f "$CONTAINER_NAME"exit 1 fi# 获取当前日期并格式化 DATE=$(date +"%Y%m%d-%H%M%S") RENAME_FILE="${DATE}-${BRANCH}-template.tar.gz" # 重命名文件为当前日期时间# 重命名文件 echo -e "${YELLOW}重命名文件 ${LOCAL_OUTPUT} 为 ${RENAME_FILE}...${NC}" mv "${LOCAL_OUTPUT}" "${RENAME_FILE}"# 解压文件 echo -e "${YELLOW}解压文件 ${RENAME_FILE}...${NC}" if ! tar -zxvf "${RENAME_FILE}"; thenecho -e "${RED}解压失败!${NC}"exit 1 fi# 上传文件夹到远程服务器 REMOTE_DIR="/home/node/node/template/" # 目标服务器的目录 HOST="192.168.1.235" USER="node" PASSWORD="flyread"# 如果第二个参数为 bak,则执行备份 if [ "$2" == "bak" ]; thenecho -e "${YELLOW}备份远程目录 /home/node/node/template/ 排除 log 文件夹...${NC}"# 在远程服务器上备份 /home/node/node/template/ 并排除 log 文件夹BACKUP_FILE="/home/node/node/lcs1-bak/${DATE}-${BRANCH}-template-backup.tar.gz"echo -e "${YELLOW}在远程服务器上备份目录 /home/node/node/template/...${NC}"sshpass -p "$PASSWORD" ssh $USER@$HOST "tar --exclude='log' -czvf ${BACKUP_FILE} -C /home/node/node/template ."if [ $? -eq 0 ]; thenecho -e "${GREEN}远程目录备份成功,已保存为 ${BACKUP_FILE}${NC}"elseecho -e "${RED}远程备份失败!${NC}"fi elseecho -e "${YELLOW}没有提供 'bak' 参数,跳过备份操作。${NC}" fiecho -e "${YELLOW}上传文件夹 template/workspace 和 Version-build* 到远程服务器...${NC}"# 使用 sshpass 上传 `template/workspace` 和 `Version-build*` if ! sshpass -p "$PASSWORD" scp -r template/workspace "$USER@$HOST:$REMOTE_DIR"; thenecho -e "${RED}上传 template/workspace 失败!${NC}"exit 1 fiif ! sshpass -p "$PASSWORD" scp -r template/Version-build* "$USER@$HOST:$REMOTE_DIR"; thenecho -e "${RED}上传 Version-build* 文件失败!${NC}"exit 1 fi# 成功提示 echo -e "${GREEN}文件上传成功!${NC}"# 执行远程命令 echo -e "${YELLOW}执行远程命令: node.sh -i template -s...${NC}" if ! sshpass -p 'flyread' ssh node@192.168.1.235 'node.sh -i template -s'; thenecho -e "${RED}执行 node.sh -i template -s 失败!${NC}"exit 1 fiecho -e "${YELLOW}执行远程命令: node.sh -i template start...${NC}" if ! sshpass -p 'flyread' ssh node@192.168.1.235 'node.sh -i template start'; thenecho -e "${RED}执行 node.sh -i template start 失败!${NC}"exit 1 fi# 清理临时容器 nerdctl rm -f "$CONTAINER_NAME"
效果图