jenkins用python做断言打包是否正确的脚本,需要解压包解压jar然后断言。

220 阅读2分钟

因我公司产品是一套代码,打包出来会有俩种包,为了防止各种配置打错打混,才用python在jenkins上直接造了个脚本。
有了这第一个脚本,以后在jenkins上就有可以为所欲为的感觉了。
过程很简单:
1.解压tar包
2.解压jar包
3.断言某配置文件
4.删除解压的目录。

作用:
1.可以在每次打包结束后开始断言包中的各种设置
2.若出现断言失败,就直接触发异常,在jenkins中就可以看到红色的打包项目失败红色了
3.时间大概需要10秒多

注意:
1.jenkins中默认的是python2
2.一定要删除干净解压后的文件,不能浪费打包机的资源
3.在jenkins的job中,打包的脚本后面添加python脚本后输入以下代码即可

# -*- coding:utf-8 -*-
import tarfile,os,time,shutil,sys,zipfile

def CHECK(file_name,which):
    print 'Beging Check !!!! '+which  # 打印开始提示语

    tar = tarfile.open(file_name)  #指定压缩包
    names = tar.getnames()
    if os.path.isdir(file_name + "_files_check"):   #检查是否存在check工作目录
        pass
    else:
        os.mkdir(file_name + "_files_check")  #不存在则创建
    for name in names:
        tar.extract(name, file_name + "_files_check/")  #逐个文件解压到 check工作目录
    tar.close()
    time.sleep(1)
    if which == '1':    
        fs = os.listdir(file_name + "_files_check/*********/WEB-INF/lib/")  #指定的路径
        for i in fs:
            if i[:17] == "xxxxx-service-":
                f = file_name + "_files_check/********r/WEB-INF/lib/" + i   #找到动态变化的jar包

    zfile = zipfile.ZipFile(f)  

    if os.path.isdir(file_name + "_files_check/Check_jar"):  #检查jar包解压文件夹是否存在
        pass
    else:
        os.mkdir(file_name + "_files_check/Check_jar")  # 若不存在则创建

    for names in zfile.namelist():
        zfile.extract(names,file_name + "_files_check/Check_jar/")  #解压jar包到文件夹
    zfile.close()


    f = open(file_name + "_files_check/Check_jar/dubbo/dubbo-provider.xml",'r')   #确定要断言的xml文件
    lines = f.readlines()   #获取所有行,组成一个列表
    f.close()
    time.sleep(1)
    shutil.rmtree(file_name + "_files_check")   #删除解压check工作目录

    if which=='1':  
        for i in range(len(lines)):    # 逐行判端
            if lines[i].find('interface=') != -1:  #若此行有interface
                assert (-1==lines[i].find('xx')),(i,lines[i])  #则断言此行应该不包含xxx
            elif lines[i].find('ref=') != -1:     x #若此行有ref
                assert (-1==lines[i].find('xxx')),(i,lines[i])  #则断言此行应该不包含xxx

    print 'Ending Check, no problem !!!! '+which  #无断言失败,则打印无问题
# CHECK("/home/work/jenkins_home/jobs/workspace/************/web/src/main/ci/output/xxxxxxx1.tar.gz",'1') #调用check函数,输入的是workspace后的打出来的包的路径