BPS6.7安全版本打补丁自动化脚本设计

4年前

友情说明:这套脚本中某些变量由UTP CI的全局变量值中获得,单独使用时可以根据需要自行添加对应变量。代码中所有文件均从ftp中下载,如需使用其他方式,请直接修改对应target即可。

友情说明:这套脚本中某些变量由UTP CI的全局变量值中获得,单独使用时可以根据需要自行添加对应变量。代码中所有文件均从ftp中下载,如需使用其他方式,请直接修改对应target即可。


设计思想

BPS6.7安全版本测试方案:每个漏洞每个应用单独进行测试,不做整体安全扫描测试。因此properties中会根据需要获得对应的补丁类型和应用名,参数如下表所示:


补丁文件可以分成以下几种类型:jar,patch-jar,files


说明:files中只是替换全部文件,而非修改文件中的内容。如此文件已做过修改,这种方法不可行。

补丁文件的操作方式和下载路径全部通过xml去配置,如有添加或修改,直接修改xml配置文件即可,最大程度方便日后使用。

配置文件说明:PatchServer.xml
<PatchServer>
	<ftp>
		<ip>127.0.0.1</ip>
		<port>21</port>
		<username>test</username>
		<password>test</password>
	</ftp>
	<patches catalog="BPSClient">
		<BPSClient>
			<libs javaee="Tomcat,WebLogic,JBoss,WebSphere">
				<downloadPath>/BPSClient/lib</downloadPath>
				<Tomcat>
					<lib>XXX.jar,YYY.jar</lib>
				</Tomcat>
				<WebLogic>
					<lib>XXX.jar,YYY.jar</lib>
				</WebLogic>
				<JBoss>
					<lib>XXX.jar,YYY.jar</lib>
				</JBoss>
				<WebSphere>
					<lib>XXX.jar,YYY.jar</lib>
				</WebSphere>
			</libs>
			<replacefile file="error.jsp,web.xml">
				<error.jsp>
					<downloadPath>/BPSClient</downloadPath>
					<replaceTo>wfclient/common</replaceTo>
				</error.jsp>
				<web.xml>
					<downloadPath>/BPSClient</downloadPath>
					<replaceTo>WEB-INF</replaceTo>
				</web.xml>
			</replacefile>
			<editjars jar="bps_client_patch.jar">
				<bps_client_patch.jar>
					<downloadPath>/BPSClient</downloadPath>
					<editTo>WEB-INF/lib</editTo>
					<jarName>bps-client.jar</jarName>
				</bps_client_patch.jar>
			</editjars>
		</BPSClient>
	</patches>
</PatchServer>

节点说明:


jar包打补丁思路:

一开始想到写java方法来直接将补丁中的class替换掉原始jar中的class,使用java.util.jar包下的类来解压压缩jar。实验之后发现,对于存在同名class或其他后缀名的文件,会抛出以下异常:
Exception in thread "main" java.util.zip.ZipException: duplicate entry: com/bps/client/common/i18n/i18nresources_en_US.properties
	at java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:175)
	at java.util.jar.JarOutputStream.putNextEntry(JarOutputStream.java:92)
	at com.primeton.eos.MergeJar.addFilesFromJars(MergeJar.java:93)
	at com.primeton.eos.MergeJar.createFatJar(MergeJar.java:52)
	at com.primeton.eos.MergeJar.createFatJar(MergeJar.java:42)
	at com.primeton.eos.MergeJar.main(MergeJar.java:139)

但是jar包的确是合并了,只是同名的文件没有被替换掉。进而转战另一种方法,通过命令行方式直接给jar打包。

命令行打包bat批处理文件:mergeJar.bat

参数说明:
参数名 说明原始的jar名称(包括后缀名)

以上参数会在执行build.xml之后自行修改。

补丁文件下载到本地的目录结构(生成在与build.xml同级目录中)

temp
|____editjars
|____jar-patch.jar
|____jar
|____libs
|____XXX.jar
|____……
|____replace
|____error.jsp
|____…..

脚本说明

主要脚本都在bps6.7.3_build.xml中
target 说明从ftp上下载需要替换的文件,并替换到对应目录中
附件列表 task.zip链接

by lixw
0 comments
0

COMMENTS

需要 后方可回复
如果没有账号可以 一个帐号。