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

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

背景

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

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

提效思路

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

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

脚本编写

1. 自动化构建脚本:

# -*- coding: utf-8 -*-
import jenkins,timedef 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+1if 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:passelif check_item=='\n':passelse:print check_itemif __name__ == '__main__':test_check_channels("channels.txt","check_list.txt")

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

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

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

应用与启示

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

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

转载于:https://www.cnblogs.com/LanTianYou/p/6430793.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拥有成本分析:Oracle WebLogic Server与JBoss

Crimson Consulting Group 撰写的非常有趣的白皮书 ,比较了Weblogic和JBoss之间的拥有成本 。 尽管JBoss是免费的,但该白皮书却严肃地宣称,从长远来看,Weblogic更便宜。 尽管此研究是由Oracle赞助的,但它看起来非常严肃…

mysql limit 分页 0_Mysql分页之limit用法与limit优化

Mysql limit分页语句用法与Oracle和MS SqlServer相比,mysql的分页方法简单的让人想哭。--语法:SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset--举例:select * from table limit 5; --返回前5行select * from table limit 0…

与硒的集成测试

总览 我已经使用了一段时间,遇到了一些似乎可以使生活更轻松的事情。 我以为可以将其作为教程分享,所以我将向您介绍这些部分: 使用Maven设置Web项目,配置Selenium以在CI上作为集成测试运行 寻找使用“页面对象”为网站中的页面…

linux每天一小步---sed命令详解

1 命令功能 sed是一个相当强大的文件处理编辑工具,sed用来替换,删除,更新文件中的内容。sed以文本行为单位进行处理,一次处理一行内容。首先sed吧当前处理的行存储在临时的缓冲区中(称为模式空间pattern space&#xf…

mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace

在上一篇文章《用Explain 命令分析 MySQL 的 SQL 执行》中,我们讲解了 Explain 命令的详细使用。但是它只能展示 SQL 语句的执行计划,无法展示为什么一些其他的执行计划未被选择,比如说明明有索引,但是为什么查询时未使用索引等。…

MOXy作为您的JAX-RS JSON提供程序–服务器端

在以前的系列文章中,我介绍了如何利用EclipseLink JAXB(MOXy)创建RESTful数据访问服务。 在本文中,我将介绍在服务器端利用MOXy的新JSON绑定添加对基于JAXB映射的JSON消息的支持有多么容易。 MOXy作为您的JAX-RS JSON提供程序–服…

006_过滤器

过滤器 过滤器(Filter)把附加逻辑注入到MVC框的请求处理,实现了交叉关注。所谓交叉关注(Cross-Cutting Concerns),是指可以用于整个应用程序,而又不适合放置在某个局部位置的功能,否…

Android_项目文件结构目录分析

android项目文件结构目录分析 在此我们新建了一个helloworld的项目,先看一些目录结构: 这么多的文件夹和文件中,我们重点关注是res目录、src目录、AndroidManifest.xml文件: 一、res目录主要是用来存放android项目的各种资源文件&…

实体 联系 模型mysql_数据库系统概念读书笔记――实体-联系模型_MySQL

bitsCN.com数据库系统概念读书笔记——实体-联系模型前言为了重新回顾我写的消息系统架构,我需要重新读一下数据库系统概念的前三章,这里简单的做一个笔记,方便自己回顾基本概念实体-联系(E-R)数据模型基于对现实世界的这样一种认识&#xff…

使用Twitter Bootstrap,WebSocket,Akka和OpenLayers玩(2.0)

原始帖子可以在ekito网站上找到。 对于我们的一位客户,我们需要显示一张具有实时更新的车辆位置的地图。 因此,我开始使用Play制作原型! 框架及其最新发布的版本2.0,使用Java API。 我从Play的网络聊天室开始! 2.0个样…

同步时间

同步时间 [rootlocalhost 03]# ntpdate 0.centos.pool.ntp.org 转载于:https://www.cnblogs.com/cglWorkBook/p/5556920.html

mysql 5.6.23免安装_mysql5.6.23免安装配置

1.官网下载,并解压2.环境变量,path下,追加mysql的bin路径D:\Program Files\mysql\bin;3.mysql目录下的my-default.ini重命名为my.ini,并添加下面的代码basedirD:/Program Files/mysql #mysql路径datadirD:/Program Files/mysql/d…

在Intellij IDEA中运行Vaadin应用

在本文中,我将向您展示如何使用Intellij IDEA运行vaadin应用程序。 Vaadin提供了一些用于Eclipse和Netbeans的插件。 但是对于Intellij IDEA来说,还没有插件。 但是部署vaadin应用程序比其他两个IDE容易。 这是您要遵循的步骤。 1.首先创建一个新项目&am…

mysql主从数据库

Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连…

安装openstack时遇到的错误

学习opensatck的第一步是安装DevStack来进行本机操作 1. 下面命令没有权限,解决办法:切换到root用户下执行sudo -s echo "stack ALL(ALL) NOPASSWD: ALL" >> /etc/sudoers2. 执行下面命令提示没有git,解决办法:su…

Java EE 6示例– Galleria –第3部分

关于Galleria示例的先前文章( 第1 部分 | 第2部分 | 第3部分 | 第4部分 )指导您完成基础知识以及对GlassFish和WebLogic的初始部署。 从今天开始,我尝试在其中添加一些企业级功能,因为我发现他们在自己的项目中提出了很多要求。 我…

在 Windows 上测试 Redis Cluster的集群填坑笔记

redis 集群实现的原理请参考http://www.tuicool.com/articles/VvIZje集群环境至少需要3个节点。推荐使用6个节点配置,即3个主节点,3个从节点。新建6个文件夹 分别是 7000/7001/7002/7003/7004/7005将redis.windows.conf 复制一份然后修改配置文件中的下面…

不成为编程天才的5种贡献方式

安迪莱斯特(Andy Lester)早在三月发布了原始指南,其中介绍了14种不成为编程天才或摇滚明星的贡献开源的方法 ,我真的很喜欢这个想法。 这就是为什么我决定稍微采纳一下这篇文章,并告诉您如何以及可以做什么来支持自己喜…

mysql数据库设计与应用答案智慧树_智慧树_MySQL数据库设计与应用_完整免费答案...

单位工程施工组织设计的技术经济指标体系包括有()。A.工期指标B.劳动指标C.台班利用率D.成本降低大跨径桥梁采用()将会取得良好的技术经济效益。A.横移法施工B.顶推法施工C.转体法施工D&#xf…