RexDeploy-自动发布系统

RexDeploy-自动发布系统

一、简介

RexDeploy是基于Rex开发的一个自动化发布平台。(原生是基于perl脚本构建的,这是第一版,后续会捣鼓出python版和web版本支持)

二、安装需求

* Rex 
* DBI(perl模块)
* DBD-mysql (perl模块)

(运行Linux系统之上)

一键安装方法:(Centos 5.5 和Centos 6.3测试OK)

unzip  RexDeploy.zip
cd RexDeploy/install
/bin/bash  install.sh

安装数据库过程省略,建立autask数据库,手工导入pre_host_zzb.sql,并按照如下提示做好配置。

配置: 进入到安装目录/data/RexDeploy

①配置远程服务器的通用账号和密码: Rexfile 其他配置项,缺省即可。

②配置数据库配置: RexDeploy/lib/Deploy/Db/__module__.pm

其他配置请见: RexDeploy/lib/Deploy/Core/__module__.pm 采用默认即可。

三、目录层级解释

tree -L 2

├── backup  (临时备份目录)
├── config    (配置文件目录)
│   ├── config.ini  (配置常用的配置:暂未使用,后续整合)
│   └── ip_lists.ini  (IP分组列表)
├── configuredir (发布前的配置目录)
├── lib     (模块目录)
│   ├── Common  (自定义公共模块)
│   ├── Deploy   (自定义发布模块)
│   └── Rex (官放手动安装模块)
├── logs  (日志目录)
├── remotecomdir  (从远程服务器下载后的目录)
├── Rexfile  (rex主程序入口)
├── softdir  (发布前的工程目录)
└── install (安装目录)
    ├── DBD-mysql-4.031.tar.gz
    ├── DBI-1.633.tar.gz
    └── install.sh
14 directories, 6 files
对于使用者只要关注 configuredir  softdir .

四、自动发布原理图

五、数据库表字段约束和解释

从以上的发布流程图也可以知道,整个发布的流程是以在数据库表中的规则为主,比如工程路径,启动脚本等。

表字段的详细介绍如下:

CREATE TABLE `pre_host_zzb` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘序号‘,
  `depart_name` varchar(64) NOT NULL COMMENT ‘分区名称‘,
  `server_name` varchar(128) DEFAULT NULL COMMENT ‘服务器名称或域名‘,
  `groupby` varchar(128) DEFAULT NULL COMMENT ‘分组名称‘,
  `network_ip` varchar(15) NOT NULL COMMENT ‘内网IP‘,
  `cpu` varchar(64) DEFAULT NULL COMMENT ‘CPU‘,
  `mem` varchar(64) DEFAULT NULL COMMENT ‘内存‘,
  `disk` varchar(64) DEFAULT NULL COMMENT ‘数据盘‘,
  `pro_type` varchar(64) DEFAULT ‘‘ COMMENT ‘应用类型‘,
  `config_dir` varchar(164) DEFAULT ‘‘ COMMENT ‘配置目录‘,
  `pro_dir` varchar(164) DEFAULT NULL COMMENT ‘工程目录‘,
  `log_dir` varchar(164) DEFAULT NULL COMMENT ‘日志路径‘,
  `pro_key` varchar(64) DEFAULT NULL COMMENT ‘进程关键词‘,
  `pro_init` varchar(100) DEFAULT NULL COMMENT ‘启动脚本‘,
  `pro_port` varchar(255) DEFAULT NULL COMMENT ‘启动端口‘,
  `system_type` varchar(64) DEFAULT NULL COMMENT ‘操作系统‘,
  `created_time` datetime DEFAULT NULL COMMENT ‘创建时间‘,
  `updated_time` datetime DEFAULT NULL COMMENT ‘更新记录的时间‘,
  `status` varchar(64) DEFAULT ‘启用‘ COMMENT ‘状态‘,
  `note` varchar(128) DEFAULT NULL COMMENT ‘备注‘,
  `mask` int(12) DEFAULT NULL COMMENT ‘唯一标志位‘,
  `local_name` varchar(200) DEFAULT NULL COMMENT ‘识别名称‘,
  `app_key` varchar(200) DEFAULT NULL COMMENT ‘应用唯一关键词‘,
  `is_deloy_dir` varchar(64) DEFAULT NULL COMMENT ‘发布目录判断‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=102 DEFAULT CHARSET=utf8

上面是一台服务器的基本信息记录表, 那么我着重只讲和发布相关的几个重要字段。其字段如下。

"id","app_key","server_name","network_ip","pro_type","config_dir","pro_dir","pro_key","pro_init","local_name","is_deloy_dir"

app_key: 应用发布的唯一关键词,不能有重复,不能为空,如果为空,则不会加入到自动发布的系统里面。

pro_key: 进程关键字最好选择的唯一的关键词,在关闭应用失败的时候,会通过应用关键词去KILL应用

pro_init: 启动脚本必须是在/etc/init.d/下面的脚本,不然可能会启动失败。

is_deloy_dir: 发布目录判断
=>2代表工程路径和配置路径是隔离开来的,比如:cm的工程路径为: /data/www/html 配置路径为: /data/www/ins_share 
=>1代表 工程路径和配置路径是合在一起的比如task-dispatcher,它的工程路径为/data/www/apps/task-dispatcher,配置路径为: /data/www/apps/task-dispatcher/conf

local_name: 应用发布初始目录的名字,比如 cm3系统设置的local_name为cm,且is_deloy_dir为2,那么发布的初始目录为: 工程路径:$softdir/cm 配置路径为: $configure/cm3

六、执行发布

先上发布图:比如我要发布tpic3 (此次发布替换class文件)

第一步,进入到工程目录替换class 

第二步,直接发布 

七.自动发布系统几大功能点介绍

①查看帮助 rex -T 目前暂时开发了以下的模块和功能 (左边是任务模块的名称,右边是解释和示例) 

②查看支持哪些系统的发布与操作 rex list (app_key是唯一的,一个key代表一个系统) 

③发布多个系统: rex deploy --k=‘atm jrdt cm3 carbiz3 cm6 carbiz6 rb3 rb6‘ (以空格间隔)

④下载远程服务器数据(程序和配置)到本地: rex download --k=‘atm jrdt cm3 carbiz3 cm6 carbiz6 rb3 rb6‘ (如果你要下载所有关键词的系统到本地请使用: rex download --k=‘all‘) 

⑤ 同步本地(远程download)的程序和配置=>待发布目录 rex Deploy:Core:syncpro 执行上面的时候,自动将所有待发布的目录清空,然后将下载目录的程序同步待发布的目录中 (可以设置自动同步数据到发布目录执行语句是: rex download --k=‘all‘ =>rex Deploy:Core:syncpro ) 

⑥检查数据库以及远程服务器的配置 rex check --k=‘cm6 xampprobot6‘ (就是核对数据库中关于各个配置是否正确,比如远程服务器的工程目录/配置目录/启动脚本/进程等是否存在) (检查所有远程服务器的信息: rex check --k=‘all‘ ) 

⑦批量执行命令 rex run --k=‘atm cm3 carbiz3 ‘ --cmd=‘uptime‘ (如查看系统的时间: rex run --k=‘all‘ --cmd=‘date‘) 

这是第一版,后续慢慢的改进!

我的项目地址:   https://git.oschina.net/lookingdreamer/RexDeploy_v1

 开箱即用   只要配置数据库配置就可以实现自动发布!

 欢迎大家拍砖!

时间: 2024-08-29 19:55:33

RexDeploy-自动发布系统的相关文章

游戏自动发布系统思路

⑴ftp.rsync.shell实现游戏资源自动发布至cdn集群; ⑵利用svn的hooks.python实现游戏代码自动发布至web集群; 游戏自动发布系统思路

使用ansible搭建自动发布系统

[email protected] 2015-2-3 23:23:08 1. 需求描述 1.1 后台开发者的体力劳动 互联网公司的后台工程师每天大部分时间都是对着黑黑的屏幕敲命令,敲代码.编译.部署到测试环境.测试.部署到生产环境.灰度升级.临时停掉服务.临时重启服务.发现问题回滚到上一个版本等等 如果你是在做一件服务全球用户的事情,如果你的IDC就有四五十个.机器几百台,还搞的定麽? 你可能想到写脚本来解决这个问题,不幸的是写脚本会把你拉向另一个深渊.具体原因以后有时间再说 后台开发者必须用这

新闻发布系统,添加新闻+++文件上传

1.新闻发布系统 2.文件上传+++ ①首先在index.jsp的界面上初始化一个表单. <body> <form enctype="multipart/form-data" action="<%=path%>/1.jsp" method="post"> 姓名:<input type="text" name="username"/> 选择文件:<inpu

西部开源学习笔记BOOK2《自动安装系统》

############################# #####  unit1自动安装系统 ##### ############################# ################################### #### Network Install(HTTP,FTP,NFS) #### ################################### #######1.kickstart脚本###### kickstart脚本是自动应答系统在安装过程中一切

牛腩新闻发布系统概要

开始了B/S项目学习,第一个学习内容就是开发新闻发布系统,跟着牛腩老师的视频学习有几天了,在这个过程 中也积累了点知识,在这里把新闻发布系统的一个轮廓叙述一下了. 系统说明 1.系统的整体功能 就是能够实现后台人员添加新闻,在前台可以浏览新闻并发表评论 2.功能图 3.数据库设计图 4.建表 --建立数据库 create database newssystem --建立类别表 create table category ( id int identity(1,1) primary key, [n

金融行业工作报告自动生成系统

对于诸多行业客户,在平时工作实践中,会产生大量的财务数据.交易数据,以及基于这些数据的计算过程和结果.如何将此类数据的采集.编辑.加工.汇总.整理.存储.产生分析报告,得到有效信息,工作量极大,人工成本昂贵,并且繁琐,存在风险.如果客户的工作报告生成系统为人工制作,操作风险会比较高,数据需人工采集编辑,未来产品数量和数据爆发式增长,现有制作报告人力会面临制作时效较长.缺失系统管理.无法有效完成报告查询定位等风险,间接影响客户服务体验.基于此,构建一个行业客户工作报告生成配套管理系统,从报告的出生

自动化代码发布系统实现

日常运维问题 在我日常运维工作中,代码发布可能是最普遍的一项工作之一,尤其是网页代码的更新,碎片化发布需求非常频繁.在前期开发人员比较少时,还可以由自己来上服务器通过脚本来发布代码.但随着公司项目的增多,更多的开发人员加入到公司,发布代码需求开始增多,这就占用了我大部分时间,经常的被打断其它工作来发布代码,非常地不爽,然后开始想解决方法. 尝试解决问题 当然,发布代码肯定是运维的职责之一了,但频繁的发布导致运维大部分时间浪费在重复的操作上,非常的不值得.基于此,开始限制代码发布频率,要求把不是很

一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/ 一步一步用jenkins,ansible,supervisor打造一个web构建发布系统. 本来应该还有gitlab这一环节的,但是感觉加上,内容会增加很多.所以直接用github上的spring-mvc-showcase项目来做演示. https://github.com/spring-projects/spring-

牛腩新闻发布系统-小技巧

在敲写牛腩新闻发布系统的后台代码时发现并整理了一些小技巧.分享给大家. 技巧一:将常用的代码放到工具箱 常用的代码一直反复写效率难免有些低.如果在同一窗体复制粘贴还算简便.但是如果不同的窗体间呢?这难免显得有些拖塌.VS给我们提供了这样的一个小功能.我们可以把经常需要使用的代码拖到工具箱中.用的时候再拖出来.非常方便.附图如下: 备注:大家可以看到.我拖了四段代码到工具箱中并进行了重命名,用的时候就可以双击或直接拖出去. 技巧二:插入外部代码#region 大家在一个窗体中写的代码为了有更好的直