设为首页 收藏本站
查看: 1072|回复: 0

[经验分享] 利用jenkins的api来完成相关工作流程的自动化

[复制链接]

尚未签到

发表于 2018-1-7 09:41:52 | 显示全部楼层 |阅读模式
[本文出自天外归云的博客园]


背景
  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自动化构建脚本对过滤出的渠道进行自动化构建。括号中的内容可以根据实际情况选择是否需要来进行编写脚本,然后编写一个驱动脚本,将以上分离的自动化过程组合拼装起来,形成一个连贯的包含完整工作流的自动化过程。
  启示:这个过程本来就是日常测试工作中所要面对的,稍加思考,就可以编写一个包含自动化过程的脚本出来。对工作流的效率有一个提升的同时,也是一个经验转化的过程。以后新人面对这样的过程,只需要执行脚本就可以,并不需要每次都翻看笔记或记住这个过程是什么。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432487-1-1.html 上篇帖子: .Net持续集成 下篇帖子: jenkins中通过git发版操作记录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表