ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2021-04-11 20:53:06  阅读:141  来源: 互联网

标签:脚本 实战 shell 主机 代码 编译 发布


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

图片

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

发布流程思考

结构

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

image-20210325112328103

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

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包远程发送到应用主机,因为远程访问需要免密登录,这里也需要配置密钥。

cd ~/.ssh
ssh-copy-id -i ~/.ssh/id_rsa.pub root@ip

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

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

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

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

图片

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

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

图片

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

图片

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

--spring.profiles.active=dev

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

nohup xxx >/dev/null 2>&1 &

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

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

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


标签:脚本,实战,shell,主机,代码,编译,发布
来源: https://blog.51cto.com/u_15127545/2699651

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有