ITKeyword,专注技术干货聚合推荐

注册 | 登录

window和linux命令交互之--android镜像自动化编译,通过windows的bat脚本控制ubuntu编译服务器编译镜像

yanxiangyfg 分享于 2015-05-21

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

android镜像自动化编译 文章现实愿景:

为了实现傻瓜式编译,也就是不管懂不懂linux技术的人都可以通过一键式的执行在windows端的bat脚本,然后触发ubuntu编译服务器进行镜像编译,编译完成之后ubuntu把编译出来的镜像拷贝到windows固定目录下. 目的:

一是解放对出版本人员的依赖,随时自己来触发编译.

二是实现每日编译,可以验证库上最新版本合入代码是否有问题. 知识点:

1.android镜像全自动编译之-shell和python脚本交互

2.Cygwin工具安装实现windows和ubuntu之间的命令交互

3.ubuntu编译服务器自动检测编译条件,实现自动触发编译 整个流程如图 具体实现:

一.要实现android镜像自动编译库上最新版本,就是要自动实现下载库上最新代码,自动配置产品编译环境,自动启动源码编译,编译完成之后自动报告编译结果等等步骤. 知识点1: python pexpect实现自动交互

这里就设计到repo init时需要手动输入用户名,邮箱和yes等信息,为了实现自动化交互,这里用python自带的pexpect模块来实现,用shell脚本调用python脚本来实现repo init功能,具体如下: ### repo_init.py### #!/usr/bin/python import pexpect repoinit = pexpect.spawn('repo init -u url -b branch') repoinit.expect('Your\s+Name.*') repoinit.sendline() repoinit.expect('Your\s+Email.*') repoinit.sendline() repoinit.expect('is this.*') repoinit.sendline('y') sys.exit(0) ############### shell端脚本调用python如下: ######autobuild.sh########## #!/bin/bash python repo_init.py

#自动repo init repo sync

#自动下载库上代码 source build/envsetup.sh lunch general

#这里将设general是要编译的产品 make -j4 if [ "$?" -eq 0 ] ;then

#编译成功 else

#编译失败

exit 1 fi ##################### 这里假设镜像编译完成且打包成了zip格式,现在需要拷贝到windows端,需要和windows进行交互. 还有windows的bat需要触发实现自动编译.这里需要在windows安装Cygwin实现执行shell命令,并需要在windows安装ssh服务,ubuntu也需要安装ssh服务,用来实现相互拷贝数据(scp命令,ssh链接等) 知识点2: windows和linux命令交互

一台电脑要能用windows又要能用linux,一个非常好的选择就是在windows端安装Cygwin工具,比安装虚拟机简单方便,也不像安装双操作系统一样,需要关机切换. 步骤: 1.

windows端安装Cygwin,具体操作请看如下链接: http://www.linuxidc.com/Linux/2011-05/35835.html 2.

在windows中cygwin安装ssh服务,打开cygwin输入命令:ssh-host-config,安装完成,启动用net start sshd ,具体看:

http://www.blogjava.net/Man/archive/2012/11/26/392004.html 3.

ubuntu服务端需要安装ssh服务端 sudo apt-get install openssh-server 4.

在windows安装完成Cygwin和ssh服务之后,用ssh-keygen在windows端的.ssh目录下产生密钥,然后将公钥id_rsa.pub的内容复制到服务端(ubuntu).ssh目录下的authorize_keys文件中,如果没有此文件则在服务端.ssh文件夹中创建.同样在windows端也保存ubuntu的id_rsa.pub公钥到.ssh/authorize_keys中,实现双向ssh访问. 具体看如下链接: http://jingyan.baidu.com/article/60ccbceb02bd4264cab197b9.html 这样之后windows就可以用Cygwin自带的ssh工具链接到ubuntu端了,同时可以用scp等命令,其他可用命令看Cygwin安装目录下的bin文件夹 5.

ssh -l username 192.168.11.51 "~/Work/test.sh" 实现远程执行ubuntu上的脚步文件,具体看:

http://bbs.csdn.net/topics/390489981 6.

需要在Cygwin中安装其他工具,当然可以参考: http://blog.csdn.net/chief1985/article/details/6689754 http://www.2cto.com/os/201212/176551.html 例如:$ /cygdrive/d/Software/Cygwin-64/setup-x86_64.exe -q -P

wget 可以安装wget工具,其中setup-x86_64.exe就是Cygwin-64的安装exe文件. 知识点三:自动检测触发自动编译

这里要实现点击bat脚本,触发ubuntu端自动编译.由于直接调用编译脚本时会报错: Traceback (most recent call last): ... pexpect.ExceptionPexpect: The command was not found or was not executable: repo. 在windows的Cygwin中安装repo也无法解决此错误,所以这里采用在windows端置位ubuntu标志,然后ubuntu端的服务检测到这个标志就开始执行编译脚本的方法.说的这么高深,其实很简单,具体看如下步骤: 1>

在windows端通过ssh -l username 192.168.11.51 " touch building_flag"命令创建一个building_flag文件,有ubuntu端的一个buildcheck.sh服务脚本在定时检测此文件是否存在,存在这此服务脚本启动编译脚本autobuild.sh自动编译.

当然bat脚本执行了 ssh -l username 192.168.11.51 " touch building_flag"这个命令后需要知道什么时候编译成功,并告诉用户,这bat可以轮询windows存放镜像目录下是否有镜像,有说明编译成功.因为编译完成之后,会拷贝镜像到windows指定目录.当然其他判断条件也可以,这里主要说整个流程和思路 2>

在ubuntu端创建的buildcheck.sh脚本加入到开机子启动中,这里放置到ubuntu系统的开机初始化脚本文件~/.profile的最后,把buildcheck.sh设置为后台执行,因为buildcheck.sh是一个死循环定时检测,如果不设置为后台运行,这ubuntu开机启动的时候初始化脚本无法退出,桌面永远实现不了. 如果时在/etc/profile开机启动文件最后加一句:/路径/buildcheck.sh & 这种方法有问题: (注意: 在/etc/profile加 nohup /路径/buildcheck.sh & 的启动方法不生效,采用这个开机脚本实现会导致下载代码的repo init失败. 所以这里使用另外一个启动脚本来实现) 在~/.profile文件最后加一句:nohup /路径/buildcheck.sh &

#加"&"表示后台运行.nohup在profile父进程退出时后台运行的子进程不被回收,这样就作为服务脚本在运行了. 3>

buildcheck.sh内容为定时检测building_flag文件是否存在,如果存在这触发autobuild.sh开启自动编译.内容如下: ###buildcheck.sh### while true do

if [ -f

/路径/building_flag ]

#如果building_flag文件存在

then

rm -rf

/路径/building_flag

#删除building_flag,以便进行下次编译条件检测.

. /路径/autobuild.sh

&

# 启动autobuild.sh镜像自动编译

fi sleep 30

#30s检测一次 done ################## 4>

自动化编译完成之后,需要拷贝镜像到windows,按理说执行如下命令即可:

scp /路径/镜像.zip

windows端Cygwin用户名@ip地址:windows路径 但是这样执行时,会出现ubuntu无法找到windows路径的问题,这里换用python脚本来执行此命令即可. 这里的路径是ubuntu格式的,因为安装了Cygwin,可以找到home目录在Cygwin安装目录下.当然windows格式的目录是没法识别的. 这里假设这个拷贝zip的python名字为copy_zip.py,这个脚本可以加到镜像编译打包成功之后. #####copy_zip.py##### #!/usr/bin/python import pexpect import os os.system('scp /路径/镜像.zip

windows端Cygwin用户名@ip地址:windows路径') ####end##### 例如:os.system('scp

~/*.zip Administrator@192.168.11.62:~/images') 这里的~/images路径在本人电脑上实际为"C:\cygwin64\home\Administrator" 总结:

通过前面三个知识点及其相关的操作步骤,我们就可以实现在windows端一键式执行bat脚本,然后等待编译完成,到windows指定目录获取镜像即可,完成实现了全自动话编译. 转载请注明出处

android镜像自动化编译 文章现实愿景:     为了实现傻瓜式编译,也就是不管懂不懂linux技术的人都可以通过一键式的执行在windows端的bat脚本,然后触发ubuntu编译服务器进行镜像编译,编译

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。