好久没记录自己学到的东西了。现在加入了新公司,先做个持续集成练练手,期间遇到很多问题,在此记录一下。

首先是Jenkins刷新几次就直接挂了,其实没有多少job在跑。这个问题没这么看,最后mentor发现是memory的问题,默认值太低了,必须设置一下。参见link。

然后项目源码是放在自建gitlab上的,装了个gitlab hook插件,里面会帮你装git相关的插件,而hook可以接收gitlab那边的code有变动的时候发送的消息,然后自动build。

 

构建前准备:

 

mentor说当构建任务很多的时候,保存的结果太多Jenkins会变慢变卡,所以设置了丢弃旧的构建。

jenkins拉取并打包镜像 jenkins打jar包_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。

jenkins拉取并打包镜像 jenkins打jar包_运维_02

 

在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。

 

jenkins拉取并打包镜像 jenkins打jar包_jenkins拉取并打包镜像_03

具体是先给个包含所有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成功也可以发邮件。