devops - dev.dtyunxi.cn
TRANSCRIPT
云徙科技-阿里云战略合作伙伴 1 / 15
杭州云徙科技有限公司
地址:广州市黄埔区茅岗路 88 号鱼珠智谷 A102 栋
公司主页:www.dtyunxi.com
DEVOPS 工具包
敏捷开发及持续发布技术使用手册
云徙科技
版本 2.4.1
云徙科技-阿里云战略合作伙伴 2 / 15
作者 版本 日期 说明
聂风([email protected]) 1.0.0 2016-10-08 基础版本
聂风([email protected]) 2.0.0 2017-05-13 发布 2.0 版本,支持分布式安装
聂风([email protected]) 2.3.0 2018-01-25 重构优化,支持多种混合中间件
聂风([email protected]) 2.3.1 2018-04-19 统一内外网安装地址,并智能判断内网安装无需密码认证
Git 源代码配置支持单个模块指定分支和标签
Git 源代码目录支持减号(-)
优化 clearlog,支持一键清理日志
聂风([email protected]) 2.3.2 2018-04-24 run 指令增加自动备份
配置文件介绍[saas]增加备份策略描述
聂风([email protected]) 2.4.0 2018-05-31 增加 edas python api 部署工具
聂风([email protected]) 2.4.1 2018-11-15 增加 edas 配置中心备份还原功能
聂风([email protected]) 2.4.2 2019-12-11 增加 make 子命令,方便一键打包
修正了 git 子命令的一些 bug
1 devops 安装介绍
1.1 简介
devops 工具包是运用 DEVOPS 开发运维融合的思想,结合 shell 脚本实现的一套自动化工
具包,包含了打包、归档、远程发布等核心功能
DEVOPS_HOME:是指 devops 根目录
devops 标准配置文件:是指{DEVOPS_HOME}/etc/devops.conf
1.2 安装
安装 devops 前会检查是否安装了 zip unzip,请确保这些工具已经安装好,如果是作为编
译打包机,还需要安装 maven git,如果是作为前端 Nginx 节点还需要提前安装好支持库
pcre gd geoip libxslt,安装方法:
切到 root:yum install -y 模块名
云徙科技-阿里云战略合作伙伴 3 / 15
1.2.1 下载 devops安装包:
sh -c "$(curl https://dev.dtyunxi.cn/devops)"
注:研发中心以外的网络需要下载密码请联系开发者
1.2.2 下载依赖模块并初始化安装节点:
./devops setup
可以使用-m 参数只拉指定的模块,支持关键字,如-m nginx,默认是拉取最新版本模块,
如果要接取历史版本请使用--legacy 选项,并最好在模块中带上模块版本,如:nodejs-6.6.0
初始化安装节点后,请退出当前会话,重新登录,即可以使用 devops 命令,运行 devops
-V 显示版本号即表示安装成功
1.2.3 编写主配置文件
结 合 实 际 项 目 情 况 , 编 写 devops 主 配 置 文 件 , 如 有 疑 问 可 联 系 开 发 者
([email protected])指导配置
1.2.4 安装应用
执行 devops install 即可,安装完成,支持-m 指定安装指定模块
本地安装:请带上--bend 或--fend 选项,两个选项可同时支持,分别表示后端模块
远程安装:--fend 表示只配置 nginx 不安装后端对应服务
云徙科技-阿里云战略合作伙伴 4 / 15
1.3 卸载:come soon
2 devops 目录介绍
apps:包含了:服务端的软件以及应用容器
服务端软件:如轻量配置中心、nginx
应用容器:在 spawn_instances 下,如 edas/springcloud 应用
bak:包含了一些配置文件的自动备份
bin: 包含工具包的执行程序
etc:包含了:
devops 主配置文件
conf.d:其它必要的配置文件,如远端密钥
git:源代码存放目录
log:包含了:
应用日志的软链接
nginx 运行 error log
pkg:打包目录
tgz:依赖模块目录
tmp:用于 devops 增量打包和临时文件存储
www:nginx web 目录
云徙科技-阿里云战略合作伙伴 5 / 15
3 devops 参数
devops 参数分为指令和可选参数两部分,指令可以指定一个动作,如应用模块编译,可选
参数用于辅助命令参数完成更为灵活的动作
3.1 git:获取源代码
可选参数:-b | --branch 指定 git 分支名称
可选参数:-t | --tag 指定 git 分支上的 tag 名称
3.2 build:编译源代码
可选参数:--deploy 编译并部署至中央仓库
3.3 package:打包
必选参数:-v | --version 指定打包版本号
可选参数:--pull [0|1]表示从服务器下载已上传好的包
可选参数:--push [0|1]表示需要打包后提交至打包服务器
可选参数:--exist 表示采用户自定义的包
3.4 run:发布服务,可在配置文件中指定是否远程拉包
可选参数:--exist [1|2|3] 1 表示只重启服务不发包(默认可不写),2 表示从跳板机取包发
布,3 表示仅部署远程节点本地的包
可选参数:--pull 表示只从服务器下载包,但不发布
可选参数:--catalina 指定自定义的 catalina 参数
云徙科技-阿里云战略合作伙伴 6 / 15
可选参数:--all 同时发布 beta 和 normal(仅 deploy_module 不等于"shell"时生效)
可选参数:--reload 仅对 nginx 服务有效,只重载配置文件,不重启服务
3.5 stop:停止服务
可选参数:--clearlog 表示停止服务的同时清理应用日志
clearlog:清理应用日志
3.6 stat:查看服务状态
打印应用进程信息,无特殊可选参数
3.7 make 一键打包
合并执行:git->build->package
3.8 go一键发布
合并执行:git->build->package->run
3.9 upgrade同步更新
同步更新远端节点的主程序和配置文件
3.10 config备份/还原配置中心
必选以下两个参数之一:
--backup:备份当前配置中心数据
--restore:从已有的备份中还原配置中心数据
云徙科技-阿里云战略合作伙伴 7 / 15
3.11 其它选项
3.11.1 -m | --modules
为 git、build、package、make、run、upgrade 指令共有,可以指定只对指定的模块执
行相应动作
注:run 指令支持容器类型,如 nodejs/nginx/edas/aliedas
3.11.2 -e | --env
为 build、package、run、make、go 指令共有,可以切换指定的环境,注意如果 build 指
令只支持 4 种标准环境:dev/test/stage/prod,非标准所有环境会用 test 处理
3.11.3 -f | --config
为所有指令共有,可以指定一个 devops 配置文件路径,也可使用 DEVOPS_CONF 变量
3.11.4 -p | --prefix
指定模块前缀
3.11.5 查看帮助
运行 devops 或 devops --help 即可查看全部帮助
联系开发者([email protected])
云徙科技-阿里云战略合作伙伴 8 / 15
4 devops 配置文件详解
4.1 总述
devops 配置文件提供了 devops 正确运行的重要配置信息,总共分为[main]、[project]、
[branch]、[build]、[package]、[packrepo]、[saas]、[apps]等段落,其中:
main 段落描述了 devops 主配置信息,project 和 branch 段落描述了 git 工程信息,build
段落描述了 maven 构建信息,package 段落描述了打包信息,edas 段落描述了本地 edas
中间件信息,nginx 段落描述了 web 工程信息,commit 段落描述了上传打包服务器信息,
fly 段落描述了远程发布信息
4.2 [main]
此段落描述了 devops 公共的配置信息,各参数说明如下:
ARRAY_NAME:项目名称,这个名称决定了拉取代码和打包路径
ENV:指定当前环境,自动维护
jdk_version:指定 jdk 版本号
mvnD:maven 编译参数,自动维护
gitinfo:配置 git 代码仓库,支持多 git 源
4.3 [project]
此段落描述了 git 项目仓库地址路径信息,假定某 git 项目代码如下:
{[http|https|ssh]}://{host}:{port}/{group}/{subgroup}/{project}-{module}.git
并在[main]中配置了:gitinfo="mygitlab:git@host:port"
云徙科技-阿里云战略合作伙伴 9 / 15
配置此项目的 project 配置为:
group>>subgroup@mygitlab="project-module[@gitrepo]:[branch]:[tag]"
其中 gitrepo、branch、tag 可选,但如果指定后面的选项,前面的:冒号不可省略
特别注意:各个 project-module 命名不能形成包含关系,如:yunxi-abc 和 yunxi-abc-
xyz 两个项目就形成了包含关系,项目命名应该避免这样的情况发生
4.4 [branch]
此段落描述了获取源代码时的分支及标签信息:
{group}>>{subgroup}="{分支名称}:[标签名称]"
其中标签名称可选
注意:[branch]中的分支标签配置的优先级低于:命令行指定 devops 分支及标签-t 参数
4.5 [build]
此段落描述了项目编译信息,包括:
maven 工程编译:
package="{git 工程名称} ",只根据 pom 文件编译生成 jar 或 war 包,不安装至本地 maven
仓库,不部署至 maven 中央仓库
install="{git 工程名称} ",根据 pom 文件编译生成 jar 或 war 包,并且安装至本地 maven
仓库,但不部署至 maven 中央仓库
deploy="{git 工程名称} ",根据 pom 文件编译生成 jar 或 war 包,安装至本地 maven 仓
库,同时也部署至 maven 中央仓库
最佳实践:服务类的工程放在 install 或 deploy 中,而合包项目或没有被依赖的项目放在
云徙科技-阿里云战略合作伙伴 10 / 15
package 中
前端工程编译:
react="{git 工程名称 }",支持基于 npm 编译的项目,编译后的文件必须存放在{git 工程
根目录/dist}目录下,后期才能打包成功
4.6 [package]
此段落描述了项目打包信息,包括:
service="{git 工程名称} ",打包服务模块,此配置会将{git 工程根目录}/{git 工程名
称}service/target/{git 工程名称}service.war 包拷贝至:{实际打包目录}/{git 工程名称}.war
war="{git 工程名称} ",打包非服务工程,直接将{git 工程根目录}/target/{git 工程名称}.war
包拷贝至:{实际打包目录}/{git 工程名称}.war
servicebox="{git 工程名称}/{合包名称}",适用于服务模块合包情景,此配置会将{git 工程
根目录}/{合包名称} /target/{合包名称 }.war 包拷贝至:{实际打包目录}/{合包名称}.war
react="{git 工程名称} ",此配置会将{react 项目根目录}/build 下的所有文件打包存放于:
{实际打包目录}/{git 工程名称}.war
4.7 [packrepo]
pushstr="指定打包服务器信息",目前支持 ssh 协议
pullstr="指定拉包服务器信息",支持 ftp、http 协议
4.8 [saas:{env}]
fortress="跳板机信息",支持三种协议:local(本地安装部署)、ssh1.x(远程无跳板部署,
适用于 VPC 堡垒机)、ssh1.1.x(远程有跳板机部署)
云徙科技-阿里云战略合作伙伴 11 / 15
{service}_server="提供某种服务的信息",包括版本、IP 地址、端口,如 ols_server="logio-
0.3.4://192.168.33.12:8578"
{container}_version="指定容器版本",如 nginx_version=" nginx-1.11.2.el7"
JAVA_MEM_OPTS="JVM 内存参数"
JAVA_TOMCAT_OPTS="tomcat 运行时参数"
JAVA_CATALINA_OPTS="指定 catalina 运行时参数"
JAVA_SPRINT_OPTS="指定 springcloud 运行时参数"
JAVA_HOME="指定 JDK 路径"
betanormal=1 生产环境有效,设定当前生产环境支持灰度发布
packend="指定当前环境拉包策略,支持三种策略: local 本地(默认)、pull(使用
packrepo->pullstr 地址拉包)、push(使用 packrepo->pushstr 地址拉包)"
http_protocol="http|https,指定当前环境是否使用 https,默认 http"
backup_policy="指定备份策略:保留的备份个数,默认=7"
deploy_module="指定部署模型,默认为 shell 部署,支持:alipytool:${userid}部署模型,
其中${userid}指 edas 主账号 ID 号"
4.9 [apps:{env}]
此段落描述了所有应用服务信息,格式为:
{应用名称}:{打包类型}={本次是否发布}>>{应用类型}:{服务 IP 地址}:{attr1}:{attr2}:{attr3}
其中:
应用名称=打包名称
打包类型支持 war 和 jar 两种,war 和 zip 通用
云徙科技-阿里云战略合作伙伴 12 / 15
本次是否发布=0,不发布,=1 发布
应用类型
5 devops 功能使用说明
5.1 获取更新源代码
devops git [其它可选参数请参考第 3 章]
此命令会按[project]段落的配置依次 clone 或拉取 git 工程至:
{DEVOPS_HOME}/git/{ARRAY_NAME}
目录下,并切换至指定分支和标签,如果没有指定分支标签,默认为 master 分支的 HEAD
头节点,最后会打印一份没有按预期切换分支标签的结果列表:
**************************************************************
Branch tag not matched list
**************************************************************
如果后面无任何打印信息表示命令执行成功,否则请进入提示中的 git 工程目录,检查分支
或标签不正确的原因
5.2 编译
devops build [其它可选参数请参考第 3 章]
此命令会按[build]段落的配置依次编译 maven 工程和 react 工程,并根据需要安装或部署
至 maven 仓库,react 工程则会调用{DEVOPS_HOME}/apps/中的 nodejs 编译环境,如
果编译时出现任何错误立即停止编译,程序自动退出,方便查找错误信息
云徙科技-阿里云战略合作伙伴 13 / 15
5.3 打包
devops package -v {版本号} [其它可选参数请参考第 3 章]
此命令打包一份全量编译内容至{实际打包目录},并根据版本号自动获取打包服务器上的全
量归档,将两份相同模块名的全量包对比,并将差异内容打包成增量 zip 包,同时回写
devops 配置文件[edas]段落中的[增量打包标志]
注:如果有--push 选项,则将增量或全量包推送至{打包服务器存放文件路径}/{项目
名}_arch{ARCH_LEVEL }/{env}目录下
ARCH_LEVEL=1(默认)表示增量打包,自动对比打包服务器相同版本的全量包,如果
打包服务器上全量包不存在,则此外会全量打包
ARCH_LEVEL=0 表示全量打包,生成下一次增量的基线
5.4 部署启动
devops run [其它可选参数请参考第 3 章]
此命令将打包内容部署至对应的应用容器中,并启动或重启(如果原来已启动)服务,分为
三种部署类型:local、ssh1.x 远程、ssh1.1.x,其中 ssh1.x 和 ssh1.1.x 远程部署会自动备
份,备份策略默认保留 7 个
5.4.1 local本地部署
将打好的包直接拷贝至本地应用容器目录,直接执行本地部署
5.4.2 ssh1.x远程堡垒机部署
将打好的包先远程拷贝至目标节点,再在目标节点执行本地部署
云徙科技-阿里云战略合作伙伴 14 / 15
5.4.3 ssh1.1.x远程跳板机部署
将打好的包先远程拷贝至跳板机,再拷贝至目标节点,再在目标节点执行本地部署
5.5 停止服务
devops stop [其它可选参数请参考第 3 章]
此命令将停止应用服务,实现功能与启动部署类似,但不涉及拷贝应用程序包的操作
注意,由于 edas 中间件调用 shutdown.sh 经常无法正常关闭,因此 devops 目前采取直
接 kill -9 {进程号}的方式
5.6 查看状态
devops stat [其它可选参数请参考第 3 章]
查看各个应用服务的状态,打印进程信息
5.7 清理日志
devops clearlog [其它可选参数请参考第 3 章]
此命令将清理应用日志,包括前后端各应用容器的日志
5.8 备份/还原配置中心
devops config –backup|--restore
注:
备份还原时请先停止配置中心,否则操作将失败;
请在配置中心运行的所在节点操作,不支持远程执行