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