在项目部署实施过程中,我遇到这样一个问题,客户服务器没有搭建K8s,无法使用K8s自动更新部署。如果手动更新部署,需要先删除服务器已有容器和镜像,再从公司服务器pull镜像,再构建运行。流程较为繁杂且等待时间较长。由于在测试环境部署更新中,需要使用到jenkins客户端配置,jenkins客户端的功能相对还是比较强大的,于是我考虑使用jenkins客户端配置执行客户服务器上的脚本,来达到自动更新的目的。流程如下:
从上图看,流程非常的简单,我将简单介绍每个流程的内容。
首先是在客户服务器上编辑更新脚本,我的脚本如下:
#!/bin/sh
echo "停止并删除容器"
docker-compose down
echo "删除镜像"
docker rmi <你的镜像服务器地址>:<你的镜像版本>
echo "pull新镜像"
docker pull <你的镜像服务器地址>:<你的镜像版本>
echo "启动容器"
docker-compose up -d
脚本执行的操作是1,停止并删除当前容器;2,删除当前镜像;3,从镜像服务器地址pull最新的镜像;4,启动容器;
其次,我们需要再jenkins的客户端配置服务器连接,操作如下:
在jenkins首页点击系统管理,选择系统配置,找到SSH Servers配置项
配置服务器名称Name,服务器host地址,服务器连接Username。点击高级展开高级配置
在这里配置密码和连接服务器凭证Key,一般是OPENSSH PRIVATE KEY,可自行生成,生成后复制id_rsa里面的内容粘贴到此即可。
下拉配置服务器端口Port和连接超时时间Timeout。
都配置好后,配置卡片右下角点击Test Configuration按钮测试连接,如左侧出现“Success”,即代表配置无误,连接正常。
接下来,在jenkins中配置镜像构建推送任务,此处只做简单说明,需要配置任务名称,分支源等内容,相信看这篇文章的大佬都有这个基础能力。
最后,配置执行服务器脚本任务,这一步至关重要。
新建任务,选择构建一个自由风格的软件项目。
构建触发器选择其他工程构建后触发,并且选择只有构建稳定时触发,当然也可根据实际需要修改。配置关注的项目即上一步配置的镜像构建推送任务,特别注意需要以逗号","结尾,否则无法识别。继续在下方Build Steps增加构建步骤,选择Send files or execute commands over SSH。
配置内容如下:
SSH Server中Name选择第二步配置好的服务器SSH Server连接,在Exec command处配置要执行的脚本命令,此处我配置的是进入脚本所在路径,sh执行脚本。保存后配置完成。
接下来就是执行构建并推送镜像任务,观察该任务完成后是否唤起脚本执行任务。至此,我们就完成了使用jenkins客户端配置自动执行服务器脚本,以达到自动更新的目的任务。需要说明的是,这种服务器连接方式并不安全,个人不建议这样做。欢迎大家指正。