开发者社区> 天外归云> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

利用jenkins的api来完成相关工作流程的自动化

简介: [本文出自天外归云的博客园] 背景 1. 实际工作中涉及到安卓客户端方面的测试,外推或运营部门经常会有很多的渠道,而每个渠道都对应着一个app的下载包,这些渠道都记录在安卓项目下的一个渠道列表文件中。
+关注继续查看

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

背景

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=='\n':
                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自动化构建脚本对过滤出的渠道进行自动化构建。括号中的内容可以根据实际情况选择是否需要来进行编写脚本,然后编写一个驱动脚本,将以上分离的自动化过程组合拼装起来,形成一个连贯的包含完整工作流的自动化过程。

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

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
通过Jenkins Pipeline实现自动化
通过Jenkins Pipeline实现自动化
57 0
基于Jenkins Pipeline自动化部署
最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置,也可以在每个项目中直接写Pipeline脚本,但像我那么追求极致的程序员来说,这些方案都打动不了我那颗骚动的心,下面我会跟你们讲讲我是如何通过Pipeline脚本实现自动化部署方案的,并且实现多分支构建,还实现了所有项目共享一个Pipeline脚本
85 0
使用Jenkins对接Github进行自动化CI
使用Jenkens对接GitHub进行自动化构建
4703 0
(五)Java工程化--Jenkins
Jenkins简介 Jenkins 是一种用Java语言实现的持续集成工具,Jenkins是一个平台, 在此基础上实现下面两个目的. CI 持续集成(Continous Integration) CD 持续交付(Continous Delivery) 安装 下载地址: https://jenkins.
1052 0
Git + Maven + Jenkins 实现自动化部署
一、安装 和 准备工作     我们选择了用 Tomcat 服务器下 war 包的安装方式。Jenkins 的下载地址:http://mirrors.jenkins-ci.org/,打开链接后,表格有war列。
2686 0
jenkins笔记(1)
一、相关概念 1.1 Jenkins概念: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。
1552 0
想弄清楚LIBEVENT和EPOLL之类的关系,不要因为走得太急而迷失了方向
要一步一步构架起整个体系, 来日方长。 系统调用级别的EPOLL和函数库LIBEVENT之间,大体关系应该是如何呢? 网上有说法: ~~~~~~~~~~~~~~ libevent对底层多路复用机制的封装通过两个数据结构eventop和evbase,都在event_base结构体中使用。
1108 0
Jenkins 自动化部署上线 ​
Jenkins 自动化部署上线 Jenkins 自动化部署上线 由于51cto格式问题,可以直接访问https://www.abcdocker.com/abcdocker/3174 查看原文 [TOC] ##一、Jenkins是什么 Jenkins是一款自包含的开源自动化服务,可用于自动执行与构建,测试和交付或部署软件有关的各种任务。
1456 0
+关注
天外归云
测试开发工程师,目前就职于网易。
200
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载