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

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

 
相关文章
|
18天前
|
人工智能 运维 监控
构建高效自动化运维流程的策略与实践
【7月更文挑战第55天】在数字化转型的浪潮下,企业IT基础设施日趋复杂多变,传统的手动运维方式已难以满足快速响应和高稳定性的需求。本文将探讨如何通过自动化工具和策略,构建一个高效的自动化运维流程,旨在提高系统部署的速度、准确性和可靠性,同时降低人为错误和运营成本。我们将详细分析自动化运维的关键组件,以及在实施过程中可能遇到的挑战和解决方案。
|
20天前
|
测试技术 索引 Python
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(一)
本文提供了Python接口自动化测试中的编程练习,包括计算器、猜数字、猜拳和九九乘法表等经典问题,涵盖了数据类型、运算、循环、条件控制等基础知识的综合应用。
28 1
|
11天前
|
敏捷开发 jenkins 测试技术
自动化测试之美:打造高效软件测试流程
【8月更文挑战第31天】在软件开发的海洋中,自动化测试犹如一艘航船,引导着项目向着质量的灯塔航行。本文将揭开自动化测试的神秘面纱,从基础理论到实践操作,一步步构建起你的测试框架。你将学会如何编写实用的测试脚本,并将其融入日常开发,最终让测试成为敏捷开发不可或缺的力量。让我们启航,探索自动化测试的世界,确保代码之船稳健前行。
|
10天前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
29 1
|
11天前
|
Kubernetes jenkins 持续交付
Jenkins 插件生态:提升自动化能力
【8月更文第31天】Jenkins 是一个开源的持续集成/持续交付(CI/CD)平台,广泛应用于软件开发的各个阶段。Jenkins 的一大特色就是其丰富的插件生态系统,这些插件极大地扩展了 Jenkins 的功能,使其能够适应各种各样的应用场景。本文将深入探讨 Jenkins 的插件生态系统,并指导如何选择和配置插件以满足特定需求。
33 1
|
17天前
|
机器学习/深度学习 传感器 数据采集
深度学习之生产流程自动化
基于深度学习的生产流程自动化是一种将深度学习技术应用于工业生产流程中,以实现更高效、智能化和自适应的生产管理和控制的方式。通过利用深度学习算法对大规模数据进行分析与预测,生产流程自动化系统可以优化资源分配、提高生产效率、降低成本,并适应快速变化的市场需求。
29 2
|
20天前
|
存储 测试技术 数据格式
Python接口自动化测试框架(练习篇)-- 数据类型及控制流程(二)
本文通过数据类型转换和文件读取的练习,复习了Python中的数据类型、循环、条件判断、内置函数等基础知识,并演示了如何将字符串数据转换为字典列表,以及如何从文本文件中读取和转换数据。
30 1
|
10天前
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
29 0
|
10天前
|
运维 监控 jenkins
自动化运维实践:构建高效的CI/CD流程
【8月更文挑战第31天】在软件开发的海洋中,持续集成和持续交付(CI/CD)是推动现代开发实践的强大潮流。本文将带你潜入这股潮流之下,探索如何构建一个高效且灵活的自动化运维流程,以提升软件交付的速度与质量。我们将从基础工具的选择到流程设计,再到实际操作的技巧,逐步展开讨论,并结合代码示例,使理论与实践紧密结合。
|
10天前
|
监控 测试技术 API
下一篇
DDNS