1. Linux机器 root 用户, 创建一个普通用户,目的是防止后续解压脚本影响文件属性;

2. CI出的新包在windwos环境的路径信息,文件名称信息;
suse10: \\10.10.10.10\suse10\pkg
1.tar.gz
2.tar.gz
不是单纯的扫描目录下所有文件的原因是避免后续网络传包时拷贝了不必要的包。

suse11 : \\11.11.11.11\suse11\pkg
1.tar.gz
2.tar.gz


3. 后续进行文件比对的windows环境
ip, administrator/passwd, share dir path
new pkg:
\\12.12.12.12\temp\suse10(11)
old new
common install common install
common run common run
ngin install ngin install
ngin run ngin run

需要执行的步骤如下:
1. 以root用户执行 在linux机器上创建一个用户
$useradd -m -d /home/snepack -s /bin/csh snepack
先判断/home/snepack 空间是否足够(>=8G),
如果空间不足,提示用户指定用户的家目录,再次判断,如果仍然不足,报错退出。

2. 以snepack 用户创建挂载目录
#挂载换包系统对应的4个目录
$mkdir old_pkg/suse10/common
$mkdir old_pkg/suse10/ngin
$mkdir old_pkg/suse11/common
$mkdir old_pkg/suse11/ngin

$mkdir new_pkg
#挂载CI出包机器的目录
$mkdir -p temp_pkg/suse10
$mkdir -p temp_pkg/suse11
$chown snepack:snepack -R temp_pkg
$chown snepack;snepack -R old_pkg
$chown snepack;snepack -R new_pkg

#挂载需要拷贝到比对的windows机器的文件
$mkdir -p compare_pkg/suse10/old
$mkdir -p compare_pkg/suse10/new
$mkdir -p compare_pkg/suse11/old
$mkdir -p compare_pkg/suse11/new

3. 挂载CI出包目录
mount -t cifs -o username=administrator,password=123 //10.10.10.10/VMP/ /home/snepack/temp_pkg/suse10

mount -t cifs -o username=administrator,password=123 //11.11.11.11/VMP/ /home/snepack/temp_pkg/suse

上面的思路遇到了两个困难点:
1. 必须知道挂载的windows机器的用户名和密码,只是知道共享目录是不够的;
2. linux在mount 时,报mount(12): can not allocate memory, 查询之后发现是因为windows 7共享目录下的文件太大,需要修改windows机器的一些参数。

对于第一个困难点还是可以解决的,只是在机器密码发生变更时,需要修改相关的配置;
而第二个困难点就无能为力了, 因为我不能呢要求共享目录的windows机器去修改相关的参数,以保证mount成功。

只好将上面的mount思路抛弃。但是上面的mount思路还是很好的,因为它是windows 和 linux共享的一种经典方式。
mount -t cifs -o username=administrator,password=123 //10.10.10.10/VMP/ /home/snepack/temp_pkg/suse10
这个格式要记住。

第二种windows 和 Linux交互方式,ant脚本

mount目录的目的是为了拷贝windows下的文件到linux机器上,那就换种方式来实现好了。
windows下传输文件到Linux的方式很多,比如Xftp, pscp 等等,但是要想做成自动化,又不好做。
在网上查找了一些方式:
比如Xshell 提供的rz, sz功能,可以在Xshell中配置默认的上传,下载目录,但是灵活性较差;
比如使用pscp命令自动传输文件。

pscp的命令做成自动化需要bat脚本,而bat不是我熟悉的。

所以最终使用的方案是:
ant脚本 作为最外层的调用接口,对用户暴露;
在ant脚本中调用bat脚本,在bat脚本中调用pscp.exe 实现传输文件到Linux。

方案的优化点:
1. 在ant脚本中直接使用scp 的sftp属性传输文件;
2. 在ant脚本中直接调用pscp.exe, 省略bat脚本层。

新的困难点:
在windows下向Linux传输大文件时,会导致linux的cache不停上涨,最终传输速度越来越慢,效率变的让人无法接受。
最终只能放出大招:
手工释放内存;
简单的来说使用root用户执行如下命令:
#sync
#echo 3 > /proc/sys/vm/drop_caches
具体的解释,可以参考如下博文,觉得写的很好;
http://www.cnblogs.com/hoys/archive/2012/09/08/2676922.html

所以最终的方案是:
使用ant脚本实现自动化,在ant脚本中实现如下逻辑:
1. 在每次传输文件到linux下之前,先使用root用户登录linux,释放单板的内存;
2. 传输文件;
3. 再次使用root用户登录linux,释放单板的内存, 以免影响其他应用。
4. 使用普通用户登录linux,执行自动刷新补丁的脚本,刷新补丁包
5. 下载linux上刷新后的补丁包到windows机器,做后期比对,确认刷新范围是否正确。
6. 自动上传最新的补丁包到补丁系统,完成换包动作。

 

完成自动刷包系统,涉及到的知识点包括:

0. 换包系统的流程与实现方案的构思

1. Linux下mount命令的使用;

2. ant脚本

3. 传输大文件到Linux机器带来的影响

4. Linux内存如何手工释放

5. 如何编写shell脚本实现自动化刷包

 

做完这个系统,更清晰的认识到: 一个系统的前期设计相当重要,只要前期设计做的好,实现方法是多种多样的。

方向正确 + 执行力 =  成功。方向很重要。

 

posted on 2015-11-15 23:14  hui2702  阅读(176)  评论(0)    收藏  举报