使用python脚本配合Jenkins自动发布软件新版本

软件需要发布一个新版本时,需要比较多的操作。其中很多操作,我们是可以使用脚本语句代替人手去完成的,这样可以减少人工操作出错的风险,也能提高效率,我们只需要准备好必要的文件就好了。本文将介绍如何使用Jenkins和python脚本帮助我们发布软件新版本,包括:”准备发布新版文的文件RPK(release package)“、”服务器端新版本的发布“、”安卓客户端发布新版本“、”回滚war包和数据库“。

1、准备发布新版文的文件RPK(release package)。

(1)准备发布新版本的sql语句。

准备好新版本需要更新的sql语句,如修改数据库表、插入新数据、修改过的存储过程等。

如果是使用svn版本控制工具,可以找出发布版本号范围的所有涉及的数据库改动,

对于修改过的数据库表,直接对比两个文件:发布范围内最大版本和最小版本的上一个版本文件,就可以知道做了那些修改,从而写出sql更新语句。

对于修改过的存储过程,准备删除存储过程和创建存储过程sql语句。

调用其它文件的sql命令:

USE nbr;
	source D:/BXERP/trunk/release/00015_v2_0_r2193_r2312/SQL/1_所有私有DB_DeleteFutureRetailTradeAggregation.sql;
	source D:/BXERP/trunk/release/00015_v2_0_r2193_r2312/SQL/2_所有私有DB_T_ConfigCacheSize_Reset.sql;
	source D:/BXERP/trunk/release/00015_v2_0_r2193_r2312/SQL/5_所有私有DB_CreateTables.sql;
	DROP PROCEDURE IF EXISTS `SP_RetailTradePromotingSyncCacheDispatcher_RetriveN`;
	DROP PROCEDURE IF EXISTS `SP_RetailTradePromotingSyncCacheDispatcher_UpdatePOSStatus`;
	DROP PROCEDURE IF EXISTS `SP_RetailTradePromotingSyncCache_DeleteAll`;
	DROP PROCEDURE IF EXISTS `SP_RetailTradePromotingSyncCache_POSUpload`;
	DROP PROCEDURE IF EXISTS `SP_RetailTradePromotingSyncCache_RetrieveN`;
	DROP PROCEDURE IF EXISTS `SP_VipCategorySyncCacheDispatcher_RetriveN`;
	DROP PROCEDURE IF EXISTS `SP_VipCategorySyncCacheDispatcher_UpdatePOSStatus`;
	DROP PROCEDURE IF EXISTS `SP_VipCategorySyncCache_Delete`;
	DROP PROCEDURE IF EXISTS `SP_VipCategorySyncCache_DeleteAll`;
	DROP PROCEDURE IF EXISTS `SP_VipCategorySyncCache_POSUpload`;
	DROP PROCEDURE IF EXISTS `SP_VipCategorySyncCache_RetrieveN`;
DELIMITER $$
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PrivateDB/SP_Vip_UpdateBonus.sql
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PrivateDB/SP_VIP_Create.sql
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PrivateDB/SP_VIP_Update.sql
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PrivateDB/SP_SmallSheetFrame_Delete.sql
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/Function/Func_CheckPosDependency.sql
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PrivateDB/SP_VIPCategory_Delete.sql
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PrivateDB/SP_VipCardCode_Create.sql
DELIMITER ;

USE nbr_bx;
	source D:/BXERP/trunk/release/00015_v2_0_r2193_r2312/SQL/3_公有DB_T_Bxconfiggeneral.sql
DELIMITER $$
	source D:/BXERP/tags/nbr_20200515_v2.0.4/src/sql/SP/PublicDB/SP_Company_MatchVip.sql
DELIMITER ;

具体文件的sql命令如:1_所有私有DB_DeleteFutureRetailTradeAggregation.sql

DELETE FROM t_retailtradeaggregation WHERE F_WorkTimeStart > date_sub(now(),interval 1 day);
……

(2)编写release步骤、注意事项。

一般根据上一次发布经验编写,检查运行环境、修改Jenkins变量等信息。

使用python脚本配合Jenkins自动发布软件新版本_第1张图片

(3)准备替换配置文件的批处理文件。

如:更新最近的PublicAccount.properties配置文件:

copy /y D:/BXERP/trunk/release/00015_v2_0_r2193_r2312/NbrConfigFile/PublicAccount.properties D:/NbrConfigFile/PublicAccount.properties

2、服务器端新版本的发布。

使用Jenkins工具创建发布war的任务,调用python脚本。

如果是第一次在Jenkins发布新版本,需要新建任务,如服务器端新版本的发布任务war_release,配置调用的python脚本语句。

war_release_preBuildSteps.py脚本做一些发布war前的工作:

查看代码
# coding=utf-8
"""
case1: release成功
case2: release失败>重新release(特别注意:如果release失败需要rollback时,sql使用此次备份成功的sql文件,war包拿上一次release成功的war包进行rollback)
case3: 之前有无成功release(目前保证每次release的文件夹都是成功的,故可略过该case)
case4: 之前有无release过(暂不考虑该case)
"""

import time
import os
import subprocess
# 引用自定义的模块
import sys
sys.path.append('D:/BXERP/trunk/src/jenkins/Common')	#引用的自定义模块不与该python文件在同一目录时,需要指定路径
from bxUtility import printInfo
from bxUtility import closeTomcat
from bxUtility import replaceLine

# 需要从jenkins的环境变量读取的参数:文件夹路径、现使用场、版本号
CURRENT_ReleaseNO = os.getenv("CURRENT_ReleaseNO")	#示例:CURRENT_ReleaseNO=00004_v1_0_r691_r691
CURRENT_Env = os.getenv("CURRENT_Env")
CURRENT_ReleaseNbrVersionNO = os.getenv("CURRENT_ReleaseNbrVersionNO")
# 此次release放置输出文件的总路径
CURRENT_ReleasePath = 'D:/Release/' + CURRENT_ReleaseNO
# DB备份的文件夹路径
CURRENT_DbBackupPath = CURRENT_ReleasePath + '/backup'
# DB的备份
CURRENT_Time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
DB_BackupFile = CURRENT_DbBackupPath + '/' + CURRENT_Time + '.sql'
# 要执行的BAT文件
PATH_BatToRelease = 'D:/BXERP/trunk/release/' + CURRENT_ReleaseNO + '/BAT/pre_steps.bat'
# 要Release的SQL文件
PATH_SqlToRelease = 'D:/BXERP/trunk/release/' + CURRENT_ReleaseNO + '/' + CURRENT_Env + '/release'
FILE_SqlToRelease = PATH_SqlToRelease + '/release.sql'
# 找不到release.sql时的特殊提示
errTag = '~~~~~~XXXXXXXX~~~~~~~~~~~~~XXXX~~~~~~~~~~XXXX~~~~~~~~~';
# 要修改的login.jsp的路径
FILE_LoginJsp = "D:/Jenkins/workspace/war_release/src/main/webapp/WEB-INF/admin/login.jsp"
# 要修改的QueenService的helper.properties的路径
FILE_HelperProperties = "D:/QueenService/Bin/helper.properties"

def dbBackup():
	"""
	备份db(sql)
	"""
	os.system('cd D:/wamp/bin/mysql/mysql5.6.17/bin')
	(errCode, errMsg) = subprocess.getstatusoutput('mysqldump --no-defaults --login-path=root --default-character-set=gb2312 -R --hex-blob -A>' + DB_BackupFile)
	print ('备份DB的错误码=' + str(errCode

你可能感兴趣的:(4.技术细节,python,java,mysql,数据库,linux)