nodejs代码上线脚本
一 代码上线脚本
1.1 项目路径
[root@app-01 ~]# tree -d -L 3 /data/apps/project/
/data/apps/project/
├── apps
│ └── mini-games
│ └── public_v1.0.0
└── mini-games -> /data/apps/project/apps/mini-games/public_v1.0.0
1.2 脚本实例
#!/bin/bash
#Author 1304995320@qq.com
project_version=$2
project_name=$3
project_link_path=/data/apps/project
project_path=${project_link_path}/apps
jenkins_project_path=/data/jenkins/jenkins_task/${project_name}
build_name=public
list_ip=(172.16.1.43 172.16.1.205)
#build代码
function build() {
cd ${jenkins_project_path}
git clone git@gitlab.example.com:project/mini-games.git
git checkout ${project_version}
npm install --unsafe-perm
npm run build
}
# 拷贝文件
function scp_tarfile() {
for node in ${list_ip[@]};do
#判断目录是否存在,不存在创建
ssh root@${node} "[ ! -d ${project_path}/${project_name} ] && mkdir -pv ${project_path}/${project_name}"
#sync更新包
rsync -azP -e 'ssh ' ${jenkins_project_path}/${build_name}/ root@${node}:${project_path}/${project_name}/${build_name}_$project_version
#更新软连接
ssh root@${node} "ln -svfn ${project_path}/${project_name}/${build_name}_$project_version ${project_link_path}/${project_name}"
echo "${node}节点版本更新成功"
done
}
# 删除节点历史更新包
function delete_history_version() {
for node in "${list_ip[@]}";do
version_numbers=`ssh root@${node} "ls -ldrt ${project_path}/${project_name}/* | wc -l"`
echo " ${node}节点历史更新包版本有${version_numbers} 个"
if [ ${version_numbers} -gt 5 ];then
echo "即将在${node}节点删除历史更新包 "
version_name=`ssh root@${node} "ls -ldrt ${project_path}/${project_name}/* |head -n 1 | awk '{print $9}'"`
ssh root@${node} "rm -rf ${version_name}"
echo "${node}删除历史版本${version_name} 成功"
fi
done
}
# 版本回滚
function rollback_last_version() {
for node in "${list_ip[@]}";do
echo "当前节点${node}"
now_version=`ssh root@${node} ""ls -ldrt ${project_link_path}/${project_name} | awk -F"->" '{print $2}'""`
now_version=`basename ${now_version}`
echo "${node}当前的版本是----> ${now_version}"
rollback_version=`ssh root@${node} ""ls -ldrt ${project_path}/${project_name}* | grep -B1 ${now_version} | head -n1 | awk '{print $9}'""`
echo ${rollback_version}
ssh root@${node} "ln -svfn ${rollback_version} ${project_link_path}/${project_name}"
done
}
# 站点更新测试
#function web_test() {}
# 禁用负载均衡
#function delect_node_lvs() {}
# 开启负载均衡
#function add_node_lvs() {}
main() {
case $1 in
Deploy)
build
scp_tarfile
delete_history_version
;;
Rollback)
rollback_last_version
;;
esac
}
main $1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)