Linux之自动化部署
一、自动化部署git项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/bin/bash # 清除项目进程和历史文件 pkill - f start.py sleep 1 cd / root / automation |rm - rf testProduce / # 获取项目最新git代码(前提服务器配置好git账户) git clone git@dev.test.com:test_code / testProduce.git # 启动项目 cd testProduce / nohup / usr / python / bin / python3 start.py & sleep 3 # 检查是否启动成功 pinfo = `pgrep - af start.py` if [ - n $pinfo ] then echo "Successfully!!!" else echo "Failed!!!" fi |
二、自动化更新git项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/bin/bash # 切换至项目路径 cd / root / automation # 检查项目是否有更新 gitinfo = `git pull` if [[ "${gitinfo}" = = "Already up-to-date." ]] then echo "Already up-to-date." else # 重启项目 pkill - f start.py sleep 1 nohup / usr / python / bin / python3 start.py & sleep 3 # 检查是否启动成功 pinfo = `pgrep - af start.py` if [ - n $pinfo ] then echo "Successfully!!!" else echo "Failed!!!" fi |
三、自动化部署已有项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/bin/bash # 设置源服务器信息 username = "root" password = "root" host = "10.22.33.44" dir = "/usr/local/app" # 备份当前项目(以备回滚) echo "Saving testProduce..." now = `date + % Y % m % d % H % M % S` cd $ dir | mkdir - p bak / $now tar - czvf testProduce.tar.gz testProduce / testProduce - web / mv testProduce.tar.gz bak / $now / testProduce.tar.gz # 拷贝项目更新包 echo "Copying testProduce..." / usr / bin / expect<<EOF set timeout 10 spawn scp - r $username@$host:$ dir / testProduce - web / $ dir expect "*password:" send "$password\r" expect eof spawn scp - r $username@$host:$ dir / testProduce / lib $ dir / testProduce / expect "*password:" send "$password\r" expect eof spawn scp $username@$host:$ dir / testProduce / testProduce.jar $ dir / testProduce / expect "*password:" send "$password\r" expect eof #interact EOF # 重启项目 echo "Restarting testProduce..." sh testProduce / restart.sh sleep 8 # 检查是否启动成功 pinfo = `pgrep - af testProduce.jar` if [ - n $pinfo ] then echo "Successfully!!!" else echo "Failed!!!" fi :<<COMMENTBLOCK pkill - f testProduce.jar COMMENTBLOCK |
四、自动化回滚项目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #!/bin/bash # 清除当前项目 echo "Clear..." rm - rf testProduce * |cd bak # 检查是否指定回滚版本(默认回滚上个版本,按日期排序,所以此路径不能有其他文件) if [ - z $ 1 ] then vs = `ls - l |sort - r |awk 'NR==2 {print $NF}' ` else vs = $ 1 fi # 回滚项目 echo "Reset>>> $vs" cd $vs |cp testProduce.tar.gz .. / .. / tar - zxvf testProduce.tar.gz |rm - f testProduce.tar.gz # 重启项目 echo "Restarting testProduce..." sh testProduce / restart.sh sleep 8 # 检查是否启动成功 pinfo = `pgrep - af testProduce.jar` if [ - n $pinfo ] then echo "Successfully!!!" else echo "Failed!!!" fi |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2017-07-06 移动H5页面,Android手机下,input获取焦点弹出系统虚拟键盘时,挡住input解决方法