写了两个自动化脚本,从下载-构建-打包-提取-备份-更新-重启

news/2024/12/18 14:41:38/文章来源:https://www.cnblogs.com/xiaofei12/p/18614887
##!/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"

  

 

效果图



 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/854807.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冰雪旅游大爆发:如何优化冰雪旅游管理与服务——看板软件篇

利用板栗看板进行冰雪旅游的旅游管理与运营可以带来诸多便利和效益。通过明确目标与需求、创建项目列表、信息整合与展示、游客管理与服务、数据分析与决策支持以及团队协作与沟通等方面的应用,可以显著提升冰雪旅游的管理效率和服务质量。Wind数据显示,自9月份以来,冰雪旅游…

CI/CD方案:推动智能汽车开发的高效利器

CI/CD方案:推动智能汽车开发的高效利器在智能化和自动驾驶技术飞速发展的背景下,汽车软件开发的复杂性正以前所未有的速度增长。面对市场对效率、质量和快速迭代的高需求,传统开发模式已然捉襟见肘。作为提升开发效率和质量的核心工具,CI/CD(持续集成与持续交付/部署)方案…

说一个使用okhttp的理由

当时公司为了让接入网关变的简单,于是就开发了一个client,然后给各个服务去使用。 有一次发送请求的时候,发现报timeout了,但实际上业务已经执行成功了。于是就去追代码,发现使用的尽然是hutool包的工具,那个真是糊涂呀 。 看代码发现没有指定timeout的参数就使用了默认参…

大学生职业规划模板汇总(大学生职业规划大赛PPT模板)

前言 全国大学生职业规划大赛是由教育部举办的赛事,首届大赛于2023年9月至2024年5月举办,总决赛在上海市举行。生涯教育与就业指导工作贯穿高校招生、培养、就业全过程,是就业指导服务的核心内容、强化价值观引导的重要载体、促进毕业生高质量充分就业的基础工作。以全国大学…

Git错误提交而已,不用慌

Git错误提交而已,不用慌 目录初始化结构1、第一次误提交 提交了错误文件,同时修改1.txt内容为1232、第二次正常提交 修改1.txt内容为456提交记录回滚方式一 git revert 版本号 删除误提交的那一次提交,出现冲突,手动修改冲突文件之后进行提交push操作提交记录回滚方式二 gi…

游戏各部门节日协作,6 款办公软件如何引发效率革命?

在游戏行业的激烈竞争中,冬季作为重要的营销节点,众多游戏公司都力争在这个时期推出新游戏或重大更新,以吸引玩家的目光并抢占市场份额。这一过程犹如一场紧张的冲刺赛,需要开发团队、测试团队、运营团队等多部门密切协作,高效的办公软件则成为了团队加速前进的助推器。本…

react学习

React 应用程序是由 组件 组成的。一个组件是 UI(用户界面)的一部分,它拥有自己的逻辑和外观。组件可以小到一个按钮,也可以大到整个页面。React 应用程序是由 组件 组成的。一个组件是 UI(用户界面)的一部分,它拥有自己的逻辑和外观。组件可以小到一个按钮,也可以大到…

动画组件

animation ctrl+6打开动画面板 脚本控制 新版动画组件 animator组件 动画控制器 脚本控制 无退出时间可立刻执行动画切换 布尔切换后仍持续 脚本控制 过度会更自然

AI视频监控卫士:6大应用场景助力智能化河道管理

随着河道管理面临着日益复杂的挑战,传统的人工巡查方式不仅效率低下,还难以实现全天候、全覆盖的监控。为解决这一问题,思通数科推出的AI视频监控卫士通过引入人工智能技术,提供了一种高效、智能化的解决方案,特别是在河道巡检、生态保护和水质管理等应用场景中发挥着重要…

易基因:DNA甲基化修饰整体研究方案

01.技术简述 DNA 甲基化是一种表观遗传修饰,指DNA 分子在DNA 甲基转移酶的作用下将甲基选择性地添加到特定碱基上的过程。主要发生在胞嘧啶的CpG 位点,也可以在非CpG 位点和CpG 岛中发生。DNA 甲基化参与调控基因表达、X 染色体失活、基因印记、胚胎发育、细胞分化、肿瘤发生…

一文说透 LLM 网关是什么?企业为什么需要 LLM网关?

随着多种商业、开源的 LLM(大型语言模型)流行,越来越多的企业将人工智能整合到工作流中去,而这也对大模型的调用提出了新的要求。无论是在产品设计、后端开发还是数据分析方面的需求,LLM 和 GenAI (生成式人工智能)的应用都已成为企业保持竞争力的关键。 AI 技术的快速发…

冰雪旅游新纪元:看板软件引领营销变革

看板软件在助力冰雪旅游营销方面发挥着重要作用。通过提升信息透明度与游客体验、增强营销效果与精准推送、提高运营效率与管理水平以及促进团队协作与沟通等多方面的优势,看板软件为冰雪旅游营销带来了全新的变革和机遇。《中国冰雪旅游发展报告(2024)》数据显示,2022-202…