简介
本文主要用shell脚本实现的功能为:
有兴趣的童鞋千万不要错过哦~
背景
之前我写了一篇文章《我的shell脚本实战-编写一个系统发布脚本》,里面用shell脚本模拟了软件的发布,有兴趣的同学可以看看这篇文章:
当时的发布思路是这样的
将代码拉取至主机A进行编译,然后将编译后的jar包分发到各发布服务器上并运行。当时的操作是将jar包在虚拟机上运行,今天我决定改造下脚本,让jar做成镜像在docker容器中运行,同时打上tag,并将镜像推送到私服仓库。
说干就干~
或许有的同学对docker比较陌生,docker是一种容器技术,我们可以将自己的程序做成镜像,然后发布到镜像仓库中,我们需要的时候就拉取镜像,然后以容器的形式运行。感觉这个有点类似maven啊。
以前我们的程序是在服务器中运行的,现在我们的程序可以在容器中运行。与服务器没有了直接的交互。
这里我只是粗略地讲下docker,具体的知识可以网上了解下。
脚本编写
我的脚本组成大概是这样的:
拉取代码
拉取代码就不用我说了吧,我们直接从gitlab上面拉取:
#最初时候需要git clone代码
git pull
编译代码
我们使用maven将源代码编译成jar。
备份jar
在发放jar之前我们先要将原有的jar做个备份,因为编译代码与存放jar不是同一个服务器,这里我们需要远程访问备份。
拷贝发放jar
备份好后我们需要发放jar到指定路径。
备份代码执行后可以在指定路径查看结果。
镜像制作
接下来我们就需要将jar制作成镜像。
首先我们需要编写Dockerfile文件:
Dockerfile可用于自动构建镜像。
我们再创建docker-compose.yml文件,用与启动指定容器。文件内容如下:
这里使用docker-compose可以方便地编排启停容器,这里我们将程序使用的8080端口映射成服务器外部使用的18098端口,当容器启动后需要访问18098端口。
之后我们只要执行命令
docker-compose up --force-recreate --build -d
即可构建镜像和启动容器。
我们访问容器镜像管理系统Portainer,发现镜像成功构建,容器也成功启动。
重启动的容器可以看到映射的端口为18098。
推送镜像到私有仓库
每次推送镜像时需要删除原有的容器,然后再生成一个新的容器。上面的代码主要做几件事:
删除原有容器
构建新镜像并启动容器
给镜像打tag
推送镜像
在推送到私有仓库前我们需要到私服上创建一个仓库,这里我在harbor上面创建了仓库:crawl-service
仓库的大小我限制成800MB。执行推送脚本,我们来看看结果。
在harbor上也看到了镜像:
我们访问浏览器,项目的swagger也能成功访问了。
脚本整合
我们将上面的步骤整合到一个脚本中,来看看运行结果。
最后我加上了钉钉机器人的消息推送通知,只要脚本执行成功,就会发放消息通知。
通知模板代码如下:
通知效果见下图:
最后
当然我们也可以在IDEA里面做相应的配置,实现镜像构建。
这里我使用脚本的原因是可以代码构建,镜像制作,容器启动,镜像推送一步完成,我们可以将脚本加入到定时任务中,实现定时执行:
vi /etc/crontab
以上就是本篇的全部内容啦,如果对你有帮助,欢迎点赞+转发。