前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我的shell脚本实战-编写一个系统发布脚本

我的shell脚本实战-编写一个系统发布脚本

作者头像
Lvshen
发布2022-05-05 19:21:26
5970
发布2022-05-05 19:21:26
举报
文章被收录于专栏:Lvshen的技术小屋

平常我们会使用Jenkins发布系统,Jenkins可以从代码更新,编译到发布这样的一条龙服务。操作成本很低,作为程序员,肯定不满足于简单的界面操作。

于是我决定使用shell写一个自动发布的脚本,既可以更熟悉发布流程,也可以学习shell语法。

发布流程思考

结构

如上图,我们将编写的shell脚本放到主机A,执行脚本,会从git服务器拉取代码,为了在拉取代码时不需要输入密码,我们需要在gitlab上面添加密钥:

image-20210325112328103

这个密钥是在主机A中生成的,生成密钥的命令为:

代码语言:javascript
复制
ssh-keygen -t rsa

我们在 ~/.ssh目录下就可以找到id_rsa.pub

id_rsa.pub中的内容拷贝到gitlab中即可。

接下来我们在主机A中编译代码,然后将编译好的代码远程分发到不同的主机中,再在这些主机中启动程序。

发布脚本

发布脚本的主要功能见下图:

这个脚本主要要有:拉取代码,编译成jar,备份原程序,分发远程序,启动程序等功能。

因为有测试环境和正式环境,我在执行脚本的时候会在后面带一个参数pro或test,代表发布到不同的环境。

首先我们在两个环境各自相关的地址:

当输入的变量参数为test时,走test的路径。为pro时,走pro的路径。如果输入了其他的参数,会给个提示 "请输入正确参数【test或pro】,当前参数: '$1"。

为了保险起见,我会先打印出要发放的地址,然后给出询问,是否继续执行。

显示如下:

输入Y会继续执行,输入N会退出脚本。

接着开始拉代码:

这里,如果之前没有clone,会先clone下代码,如果clone了,直接pull代码。

接下来maven编译打包。打完包后我们需要将jar包远程发送到应用主机,因为远程访问需要免密登录,这里也需要配置密钥。

代码语言:javascript
复制
cd ~/.ssh
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip

我们将主机A中的密钥通过上述命令发放到应用主机。

将jar包发放前我们再将应用主机中的原jar包备份一下。

因为应用主机可能是多台,这里写了一个for循环,进行循环备份。

备份好后,就可以远程分发了。

这里也是循环发放,用到了scp命令。

最后我们启动应用主机的程序即可。

启动系统之前需要将原系统停掉,系统启动脚本在各自的应用系统中。

上图为启应用动脚本这里我们指定了启动的运行环境。

代码语言:javascript
复制
--spring.profiles.active=dev

并且可以退出控制台,实现后台运行。

代码语言:javascript
复制
nohup xxx >/dev/null 2>&1 &

以上一个简单的发布脚本就实现了。

这里是后端的实现,前端也可以用同样的脚本,只要将编译的命令改成前端的编译命令即可。

以上就是用shell脚本模拟了Jinkens的发布过程了,至此有没有发现shell也很简单呢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lvshen的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 发布流程思考
  • 发布脚本
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档