RexDeploy是基於Rex開發的一個自動化發佈平臺。(原生是基於perl腳本構建的,這是初版,後續會搗鼓出python版和web版本支持)html
* Rex * DBI(perl模塊) * DBD-mysql (perl模塊)
(運行Linux系統之上)python
一鍵安裝方法:(Centos 5.5 和Centos 6.3測試OK)mysql
unzip RexDeploy.zip cd RexDeploy/install /bin/bash install.sh
安裝數據庫過程省略,創建autask數據庫,手工導入pre_host_zzb.sql,並按照以下提示作好配置。git
配置: 進入到安裝目錄/data/RexDeployweb
①配置遠程服務器的通用帳號和密碼: Rexfile 其餘配置項,缺省便可。sql
②配置數據庫配置: RexDeploy/lib/Deploy/Db/__module__.pm數據庫
其餘配置請見: RexDeploy/lib/Deploy/Core/__module__.pm 採用默認便可。bash
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 .
從以上的發佈流程圖也能夠知道,整個發佈的流程是以在數據庫表中的規則爲主,好比工程路徑,啓動腳本等。app
表字段的詳細介紹以下:
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
開箱即用 只要配置數據庫配置就能夠實現自動發佈!
歡迎你們拍磚!