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

背景

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的api来完成相关工作流程的自动化的更多相关文章

  1. CocosCreator资源工作流程

    --摘自官方文档 资源工作流程 添加资源 资源管理器 提供了三种在项目中添加资源的方式: 通过 创建按钮 添加资源 在操作系统的文件管理器中,将资源文件复制到项目资源文件夹下,之后再打开或激活 Coc ...

  2. curl 调用jenkins的api

    jenkins提供了rest api,通过调用接口,可以执行一些job的操作,如构建job ,新建job,启用禁用等操作骑车 其次curl是什么? cURL是一个利用URL语法在命令行下工作的文件传输 ...

  3. 利用jenkins和docker实现持续交付

    利用jenkins和docker实现持续交付 一.什么是持续交付 让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定.持续的保持在随时可以发布的状况.它的目标在于让软件的构建.测试与发布变得更 ...

  4. Jenkins REST API 实例

    背景:    Jenkins具有丰富的插件生态,足以满足我们日常工作的需求,但如果我们想通过具体的Jenkins任务直接对外提供服务,而不想将内部的具体实现对外暴露(否则,需添加对应的用户权限,通过页 ...

  5. 【论文阅读】Retrieving Similar Similar Styles to Parse Clothing(相关工作)

    发表于2015年5月PAMI 作者: Kota Yamaguchi, M.Hadi Kiapour, Luis E. Ortiz, Tamara L. Berg 相关工作: [服装检索Clothing ...

  6. 利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)

    利用未公开API获取终端会话闲置时间(Idle Time)和登入时间(Logon Time)作者:Tuuzed(土仔)   发表于:2008年3月3日23:12:38 版权声明:可以任意转载,转载时请 ...

  7. Git 分支-利用分支进行开发的工作流程

    3.4 Git 分支 - 利用分支进行开发的工作流程 利用分支进行开发的工作流程 现在我们已经学会了新建分支和合并分支,可以(或应该)用它来做点什么呢?在本节,我们会介绍一些利用分支进行开发的工作流程 ...

  8. 利用百度地图API和群蚁算法,对TSP问题进行模拟与求解

    前言 最近由于换了工作,期间也有反思和总结上家公司的得失,总觉得有什么事情当初可以完成或者完成得更好,其中TSP问题就是其中之一.当初在开发一个仓配系统的时候,有一个线路排程的需求,当时自己简单在纸上 ...

  9. Jenkins简明入门(二) -- 利用Jenkins完成Python程序的build、test、deployment

    大家可能还没搞清楚,Jenkins到底能做什么? 本节内容利用Jenkins完成python程序的build.test.deployment,让大家对Jenkins能做的事情有一个直观的了解. 本节内 ...

随机推荐

  1. 一台电脑存放多个git账户的多个rsa秘钥(转)

    如何在一个电脑上存储多个git账户生成的多份rsa秘钥,实现多个账户同时使用配置的情况?今天,不幸又再次遇到这个问题. 问题描述 公司最近在开发一款开源产品,项目被托管在github上,但是公司内部一 ...

  2. 【Android】Android解析短信操作

    目录结构: contents structure [-] 获取短信 发送短信 1.获取短信 在AndroidManifest.xml中,添加权限: <uses-permission androi ...

  3. C++ STL vector(向量容器)的使用(附完整程序代码)

    一.简单介绍 Vectors 包括着一系列连续存储的元素,其行为和数组类似. 訪问Vector中的随意元素或从末尾加入元素都能够在O(1)内完毕,而查找特定值的元素所处的位置或是在Vector中插入元 ...

  4. 【转载并整理】AJAX XmlHttpRequest对象详解

    一. XMLHttpRequest由来及原生介绍 XMLHttpRequest(XHR)是一个API对象,其中的方法可以用来在浏览器和服务器端传输数据.这个对象是浏览器的js环境提供的.从XHR获取数 ...

  5. Android Developers:保存文件

    Android使用一个和其它平台基于硬盘文件系统相似的文件系统.这个课程描述了如何和在Android文件系统使用File APIs读和写文件. 一个File对象适用于读或者写从头到尾没用中断的大型数据 ...

  6. U811.1接口EAI系列之六--物料上传--VB语言

    1. 业务系统同步U811.1存货档案通用方法. 2.具体代码处理如下: 作者:王春天 2013-11-06 地址:http://www.cnblogs.com/spring_wang/p/34098 ...

  7. 使用 http 请求方式获取 eureka server的服务信息

    对于一些系统不能接入 eureka server,又需要访问接入eureka server 的服务. 方法一:直接调用服务的地址是一种实现方式,弊端就是地址是写死的,万一服务地址变更则访问不到. 方法 ...

  8. Oozie-自定义实现WorkFlow中shell action

    拷贝默认的shell目录来进行修改 $ cp -r ./examples/apps/shell/ my-apps/ 定义job.properties nameNode=hdfs://bigdata-0 ...

  9. 使用ASIHTTPRequest和ASIDownloadCache实现本地缓存

    源码:http://files.cnblogs.com/ios8/ASIHttpRequestDemo2.zip NSURL *url = [NSURLURLWithString:@"htt ...

  10. 事件,委托,action与func文章不错的

    https://www.cnblogs.com/yinqixin/p/5056307.html https://www.cnblogs.com/BLoodMaster/archive/2010/07/ ...