好久没记录自己学到的东西了。现在加入了新公司,先做个持续集成练练手,期间遇到很多问题,在此记录一下。
首先是Jenkins刷新几次就直接挂了,其实没有多少job在跑。这个问题没这么看,最后mentor发现是memory的问题,默认值太低了,必须设置一下。参见link。
然后项目源码是放在自建gitlab上的,装了个gitlab hook插件,里面会帮你装git相关的插件,而hook可以接收gitlab那边的code有变动的时候发送的消息,然后自动build。
构建前准备:
mentor说当构建任务很多的时候,保存的结果太多Jenkins会变慢变卡,所以设置了丢弃旧的构建。
在Jenkins服务器上装了git却怎么都连不上repository,报错为:
Failed to connect to repository : Command "git config --local credential.helper store --file=/tmp/git2956041026506359040.credentials" returned status code 129: stdout: stderr: error: unknown option `local‘
Google了一把发现是redhat下面用yum装的git默认是1.7.1的,要装高版本的才行。参见link1,link2。
这样弄了后发现还不行,搞了半天终于发现在Jenkins系统设置里面设置一下git的路径就好了。但在我自己的Ubuntu机器上没有设置Jenkins却可以直接用,估计是安装路径或者是环境变量的问题。
因为项目需要在一个android project里面生成jar,然后放到另一个android project里面再打包一个jar。我不高兴用多个job来构建,所以装了Multiple SCMs插件来管理。设置了本地文件夹以及每次clone前清空repository。
在redhat上配android环境时报了很多错误,各种包没装,link1,link2。再就是用javac编译时,始终找不到/android-sdk-linux/platforms/android-19/android.jar,后来发现需要改android-19和android.jar的权限。记得当时在ubuntu上搞android sdk时,官网上的包基本没什么东西,还得自己一个个补全,真是蛋疼。
【todo】
构建:build.xml
构建后步骤:
job本身判断的是build是否成功,因为要build多个project,我们可以将结果写到result.xml里面去,方便查看是哪个出错了。同时这样也方便以后加test case。
具体是先给个包含所有build和case的result模板,然后根据成功与否在进行设置。完整的log可以看console output。要是直接跑的是junit test就没这么麻烦了。
<testsuite> <testcase classname="BuildId:001" name="build:androidadsdk"> </testcase> <testcase classname="BuildId:002" name="build:androidadsupdate"> </testcase> </testsuite>
import sys print sys.argv[1] print sys.argv[2] model = file("result.xml", "r") result = file("restemp.xml", "w") for data in model: result.write(data) if sys.argv[1] in data: if sys.argv[2] in "fail": result.write(" <error message=\"fail\">\n") result.write(" </error>\n") elif sys.argv[2] in "pass": result.write(" <system-out>\n") result.write(" pass\n") result.write(" </system-out>\n") model.close() result.close()
在shell里面跑ant的时候,发现build失败的信息不好捕捉,网上找了个workround。
echo "=========== build jar ..." { ant build && { python setResult.py androidadsdk pass rm result.xml mv restemp.xml result.xml echo "=========== build jar successfully ..." } } || { python setResult.py androidadsdk fail rm result.xml mv restemp.xml result.xml echo "=========== fail to build jar !!!" }
发Email这个挺简单的,可以下个Email-ext的插件,build成功也可以发邮件。