zoukankan      html  css  js  c++  java
  • 利用jenkins的api来完成相关工作流程的自动化

    [本文出自天外归云的博客园]

    背景

    1. 实际工作中涉及到安卓客户端方面的测试,外推或运营部门经常会有很多的渠道,而每个渠道都对应着一个app的下载包,这些渠道都记录在安卓项目下的一个渠道列表文件中。外推或运营部门经常会有新的渠道产生,而为了这些新增的渠道我们会将渠道配置到渠道列表文件中并push代码,但是并不会为此在jenkins上重新进行一次整体构建。针对这些新增的零散渠道,我们会在jenkins中分渠道进行构建。

    2. 外推或运营部门会有自己的渠道列表,我们在每次app的发版前都要对安卓项目中的渠道列表进行校对,以防项目中的渠道列表漏掉某些外推或运营渠道。

    提效思路

    1. 可以将对分渠道进行构建的工作编写成脚本来完成;

    2. 可以将渠道列表的校对过程编写成脚本来完成。

    脚本编写

    1. 自动化构建脚本:

    # -*- coding: utf-8 -*-
    import jenkins,time
    
    def auto_build(channel):
        jenkins_server_url = 'http://package.ms.netease.com/jenkins'
        user_id = '需替换'
        api_token = '需替换'
        server = jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
        job_name = '需替换'
        last_build_number = server.get_job_info(job_name)['lastBuild']['number']
        this_build_number = last_build_number+1
        if server.get_build_info(job_name,last_build_number)['building'] == False:
            server.build_job(job_name, parameters={"channel":channel}, token=api_token)
            while server.get_build_info(job_name,last_build_number)['building'] == True:
                time.sleep(2)
            tip = "Build successfully, latest build number: "+str(this_build_number)+", channel: "+str(channel)
            print(tip)
        else:
            print "The latest job is still building."
    
    if __name__ == '__main__':
        channel = '需替换'
        auto_build(channel)

    知识说明:这里用到了python-jenkins的api,借助这些rest api我们可以做通过ui界面才能完成的日常任务。将过程缩减,更加快捷直接。

    程序中可变部分解释:其中server.build_job方法传入的参数channel为分渠道构建参数,也即jenkins job的参数,这个参数随不同的日常job不同是不同的,实际编写脚本的过程中这个parameters部分对应的就是jenkins job所需要传入的参数。除此之外,代码中标注需替换的部分均为可变部分,例如user_id和api_token,这两个参数在jenkins个人页面设置中点击“Show API Token”按钮可以查看,如下图所示:

    2. 渠道列表校对脚本:

    # -*- coding: utf-8 -*-
    import os
    curr_dir = os.path.dirname(os.path.abspath(__file__))
    
    def test_check_channels(channels_txt_name,check_list_txt_name):
        channels_txt_path = os.path.join(curr_dir,channels_txt_name)
        check_list_txt_path = os.path.join(curr_dir,check_list_txt_name)
        the_channels = []
        with open(channels_txt_path) as channels:
            for line in channels.readlines():
                line = line.strip()
                if line != '':
                    the_channels.append(line)
        with open(check_list_txt_path) as check_list:
            check_items = check_list.readlines()
            for check_item in check_items:
                if check_item.strip() in the_channels:
                    pass
                elif check_item=='
    ':
                    pass
                else:
                    print check_item
    
    if __name__ == '__main__':
        test_check_channels("channels.txt","check_list.txt")

    传参说明:其中“channels.txt”文件为安卓项目中配置的渠道列表文件,“check_list.txt”文件为待检查的外推或运营渠道列表文件。

    文件内容格式:文件中每一行都对应记录着一个渠道名。

    运行结果:“check_list.txt”文件中包含,“channels.txt”文件中不包含的渠道会被过滤并打印出来。

    应用与启示

    应用:在实际的工作中,在面对运营或外推所给的渠道文件时,可以通过渠道列表校对脚本过滤出不包含的渠道,(自动更新到安卓项目配置的渠道列表文件中并push代码)。再通过jenkins自动化构建脚本对过滤出的渠道进行自动化构建。括号中的内容可以根据实际情况选择是否需要来进行编写脚本,然后编写一个驱动脚本,将以上分离的自动化过程组合拼装起来,形成一个连贯的包含完整工作流的自动化过程。

    启示:这个过程本来就是日常测试工作中所要面对的,稍加思考,就可以编写一个包含自动化过程的脚本出来。对工作流的效率有一个提升的同时,也是一个经验转化的过程。以后新人面对这样的过程,只需要执行脚本就可以,并不需要每次都翻看笔记或记住这个过程是什么。

     
  • 相关阅读:
    LOJ6433 [PKUSC2018] 最大前缀和 【状压DP】
    [NOIP2017] 宝藏 【树形DP】【状压DP】
    51Nod1824 染色游戏 【Lucas定理】【FMT】【位运算】
    51Nod1778 小Q的集合 【组合数】【Lucas定理】
    LOJ6436 [PKUSC2018] 神仙的游戏 【FFT】
    LOJ6432 [PKUSC2018] 真实排名 【组合数】
    BZOJ5210 最大连通子块和 【树链剖分】【堆】【动态DP】
    LOJ2269 [SDOI2017] 切树游戏 【FWT】【动态DP】【树链剖分】【线段树】
    洛谷3707 [SDOI2017] 相关分析 【线段树】
    RBAC
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/6430793.html
Copyright © 2011-2022 走看看