[toc]
walle1.2 上线示例
1.瓦力上线流程示意图
1.1 个人总结版
瓦力上线流程示意图
过程说明
1.开发提交本地代码到gitlab(github、gitea等)仓库
2.瓦力从gitlab拉取最新代码到本机
- 注意需要把进程用户的密钥放到gitlab的ssh-keys列表,这里的进程用户指的是一个程序的运行用户,例如nginx的运行用户是www
- 如果是java项目,则会在瓦力机器上进行编译打包,因此maven仓库是部署在瓦力机器上的
3.瓦力推送最新代码到线上web机器的发布版本库(瓦力中配置,就是web机器上的一个目录)
- 既然是瓦力主动推送代码 到线上web机器,因此需要把进程用户的公钥添加到线上web机器的用户ssh-key信任列表,即做瓦力机器--->线上web机器的免密登陆
4.程序web根目录软连接到发布版本库
- 在瓦力中会配置
发布版本库
,这个发布版本库
就是每一次瓦力推送的代码存放地址,然后程序的web根目录软连接到发布版本库
,如果要做升级或者回滚的话就是改变软连接的位置
1.2 官方说明版
瓦力原理示意图
宿主机、目标机群、操作用户关系如下图所示,宿主机(walle所在的机器),是一个中间机器,是代码托管与远程目标机群的纽带。所以宿主机需要与代码托管(github/gitlab)和远程目标机群都建立ssh-key信任。
上线流程示意图
2.瓦力上线项目配置项说明
2.1 项目配置说明
2.1.1 项目配置
-
项目名称 需要上线的项目名称,最好与项目类型名相同,例如项目是兼容测试类,则名称就命名为
兼容-测试-1.0
-
项目环境 测试环境、预发布环境、线上环境
-
远程仓库地址 一般为git居多
2.1.2 宿主机配置(瓦力机器本身)
- 代码检出仓库 瓦力从gitlab拉取代码的存放路径,目录自定义设置,⚠️要保证程序运行用户对此目录有写权限
- 排除文件 可以填写要排除的文件,自定义
2.1.3 目标机器配置
- 用户 目标机器就是线上的web机器,这里填写程序的运行用户,例如tomcat的运行用户是www
- webroot 代码的最终部署路径,⚠️注意不要创建此目录,瓦力会自动生成软连接到此,正确设置父级目录即可
- 发布版本库 代码发布的版本库,每次发布更新webroot的软链到当前最新版本,格式是
/data/releases/项目名/时间目录
,回滚只需要修改软连接即可,目录自定义 - 版本保留数 过多的历史版本将被删除,只可回滚保留的版本
- 机器列表 要发布的机器列表,一行一个,非22端口可
ip:port
2.1.3 高级任务(目标机器操作)
- pre_deploy 在部署代码之前的准备工作,如git的一些前置检查、vendor的安装(更新),一行一条
- post_deploy git代码检出之后,可能做一些调整处理, 如vendor拷贝, 环境适配(mv config一test.phpconfig.php)一行一条
- pre_release 同步完所有目标机器之后,更改版本软链之前触发任务。java可能要做一 些暂停服务的操作(双引号将会被转义为\")
- post_release 所有目标机器都部署完毕之后,做一些清理工作, 如删除缓存、平滑重载/重启服务(nginx、php、task) ,一行一条(双引号将会被转义为\")
- post_release_delay 按顺序在每台目标机执行高级任务,每台服务器执行完毕后暂停x秒。默认设置为0,应用服务使用平滑重载,仅当应用服务无法支持平滑重载必须重启时才配置此参数。设置为大于0的值会出现代码发布阶段各个服务器业务代码逻辑不一致的情况,请谨慎配置
3.项目配置示例
3.1 前提条件
生产环境程序运行环境及用户说明
-
生产环境中一般会以一个非root用户运行程序,这里假设以
www
用户运行程序,生产中www
用户是所有开发登陆系统所用的用户(需要cmdb授权登陆机器),还有一个是运维专用用户,除特殊情况外,所有机器中的服务及相关目录权限都是www
用户
瓦力机器说明
- 瓦力机器中代码检出仓库的权限应该设置
www
用户可写,生产中我们直接设置为www
用户所有 - 禁止root远程登陆,登陆用户是
www
,登陆方式是密钥登陆
目标机器说明
- 目标机器的发布版本库权限所有者是
www