python回调函数之获取jenkins构建结果

news2024/11/28 3:40:09

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

需求背景:

现在用jenkins构建自动化测试(2个job),公司现将自动化纳入到发布系统

要求每次构建成功之后,把测试结果发送给发布系统。这就需要先获取jenkins构建的结果,

如果构建结束,才能发送测试结果,否则就要等待jenkins构建结束。

理解回调函数:

像这样类似:男女朋友约会结束,男方要求女方到家后发1个信息,告诉他安全到家了。

就是python回调函数的应用场景。男女朋友约会结束是在主函数mainfunc中,女朋友回家这个动作由callback函数完成。

在mainfunc函数中,男朋友会接收女朋友发送已到家的消息,那怎么接收呢?

就是通过调用callback这个函数来获得女朋友到家的状态,这个过程就称之为回调函数

基本思路:

先用一个demo理清自己的思路,要做哪些事?共分几个步骤?

每个步骤要完成哪些事情?这些思路搞定之后,代码也就完成了。

这里的有一个技巧:先用randomint随机生成一个数字,用来代表jenkins的构建结果状态,而不是每次都真的去请求接口。因为这会增加验证结果的时间成本,分散精力。

最后整个流程顺下来,再把随机数部分替换为真正去请求jenkins接口,这会大大节约调试时间。

version1:

demo 理清思路,用简单的代码描述清楚自己想要实现的效果

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def mainfunc(func):
    '''

    :param func: callback func Name
    :return:
    '''
    print('start build job')
    func()
    print('send report to ding wen qi')


def callback():
    '''

    :return: jenkins job build state
    '''
    print('jenkins is done')

mainfunc(callback)

version2:

callback函数,获取job的构建状态。

该函数返回一个状态,true或false。

true表示job已经构建结束,false表示程序仍然在构建中

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def callback():
    '''

    :return: jenkins job build state
    '''
    num = random.randint(1,10)
    #利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
    print(num)
    if num % 2 != 0:#奇数
        print('kins is building job')
        return  {'buildState':False}
    else:#偶数
        print('jenkins is done')
        return {'buildState': True}

version3:

mainfunc接收callback返回的状态,

true:做send report操作,

false 再次调用func函数确认,直到结果是true

while True:
    flag = func()
    if flag :
        print('step3:send report to ding wen qi')
        break

结果:

1 step1:start build job
2 step2:jenkins is building job
3 step2:jenkins is building job
4 step2:jenkins is done
5 step3:send report to ding wen qi

version4:

加入等待时间,在询问jenkins是否构建结束之前,先等上10秒1钟(正常1个job至少构建1分钟以上,不停询问很浪费资源)

time.sleep(2)

完整的demo代码:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:926207505
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import random
import time

def mainfunc(func):
    '''
    :param func: callback func Name
    :return:
    '''
    print('step1:start build job')

    #根据callback返回的状态,决定是否进行下一步操作
    while True:
        flag = func()
        if flag :
            print('step3:send report')
            break

def callback():
    '''
    :return: jenkins job build state
    '''
    #jenkins构建job需要至少3分钟,所以每隔1分钟请求一次
    time.sleep(2)
    num = random.randint(1,100)
    #利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
    # print(num)
    if num % 2 != 0:#奇数
        print('step2:jenkins is building job')
        return  False
    else:#偶数
        print('step2:jenkins is done')
        return True

mainfunc(callback)

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

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

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

相关文章

Neo4j图数据库实践——基于知识图谱方法开发构建猪类养殖疾病问答查询系统

Neo4j是一个开源的、高性能的图形数据库。它被设计用于存储、检索和处理具有复杂关系的大规模数据。与传统的关系型数据库不同,Neo4j使用图形结构来表示数据,其中节点表示实体,边表示实体之间的关系。这使得Neo4j在处理关系密集型数据时非常强…

【C++基础】5. 常量

文章目录 【 1. 常量的分类 】1.1 整型常量1.2 浮点常量1.3 字符常量1.4 字符串常量1.5 布尔常量 【 2. 常量的定义 】2.1 #define 预处理器2.2 const 关键字 常量 是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数…

【Flutter】Flutter 使用 flutter_dotenv 管理环境变量

【Flutter】Flutter 使用 flutter_dotenv 管理环境变量 文章目录 一、前言二、flutter_dotenv包简介三、安装和基本使用1. 安装flutter_dotenv2. 导入flutter_dotenv3. 使用flutter_dotenv 四、高级使用方法1. 变量引用2. 合并3. 在测试中使用 五、完整示例六、总结 一、前言 …

Codeforces-Round-895-Div-3

A. Two Vessels 题目翻译 你有两个装有水的容器。第一个容器含有 a a a克水,第二个容器含有 b b b克水。这两艘船都非常大,可以容纳任意数量的水。 您还有一个空杯子,最多可容纳 c c c克水。 一次,您可以从任何容器中舀出多 c…

UNet pytorch 胎教级介绍 使用DRIVE眼底血管分割数据集进行入门实战

同门的学妹做语义分割,于是打算稍微研究一下,最后的成果就是这篇文章,包括使用数据集进行测试,以及每一个部分的代码,还有一些思考改动和经验。 充分吸收本文知识你需要有pytorch的基础 U-net U-Net:深度…

您的密码是如何落入坏人之手的?

对于我们大多数人来说,密码只是无数在线服务最常用的身份验证方法。但对于网络犯罪分子而言,它的意义远不止于此——进入他人生活的捷径、至关重要的作案工具以及可以出售的商品。 对于我们大多数人来说,密码只是无数在线服务最常用的身份验证…

【MySql】数据库的聚合查询

写在最前面的话 哈喽,宝子们,今天给大家带来的是MySql数据库的聚合查询。在前面CRUD章节我们学习了表达式查询,表达式查询是针对列和列之间进行运算的,那么如果想在行和行之间进行运算,那么就需要用到聚合查询。聚合查…

计组+系统01:思维导图10分钟复习 I/O系统与中断

🪙前言 考研笔记整理,纯复习向,思维导图基本就是全部内容了,不会涉及较深的知识点~~🥝🥝 第1版:查资料、画思维导图~🧩🧩 编辑: 梅头脑 BING AI 参考用书…

Deep Java Library(六)DJLServing自定义模型,自定义Translator注意事项

DJLServing自定义模型中自定义Translator注意事项需要仔细读一下DJLServing源码中的ServingTranslatorFactory类,,一开始不了解以为DJLServing选择Translator像玄学,后来看了像迷宫一样ServingTranslatorFactory类大致明白了,以下…

SAP-写了一个FUNCTION,用于读取订单中,指定工序的状态。

需求 在开发一个涉及工序的Report的过程中发现,SAP仅提供了Function去获取订单的状态,没有提供获取订单工序状态的Function。考虑到后续开发的过程中,还需要复用到这个功能,于是打算按这个需求去开发一个Function,传入AFVC表的主键,返回的是把该工序的全部已激活的状态,…

八 动手学深度学习v2 ——卷积神经网络之卷积+填充步幅+池化+LeNet

目录 1. 图像卷积总结2. 填充和步幅 padding和stride3. 多输入多输出通道4. 池化层5. LeNet 1. 图像卷积总结 二维卷积层的核心计算是二维互相关运算。最简单的形式是,对二维输入数据和卷积核执行互相关操作,然后添加一个偏置。核矩阵和偏移是可学习的参…

储能直流侧计量表DJSF1352

安科瑞 华楠 具有CE/UL/CPA/TUV认证 DJSF1352-RN导轨式直流电能表带有双路直流输入,主要针对电信基站、直流充电桩、太阳能光伏等应用场合而设计,该系列仪表可测量直流系统中的电压、电流、功率以及正反向电能等。在实际使用现场,即可计量总…

概念解析 | U-Net:医学图像分割的强大工具

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:U-Net。 U-Net:医学图像分割的强大工具 U-Net Architecture Explained - GeeksforGeeks 在医学图像分析的领域,一种称为U-Net的深度学习模型已经成为了一个标准工具。U-Net…

牛客练习赛115 A Mountain sequence

题目: 样例: 输入 3 5 1 2 3 4 5 3 3 3 3 3 1 2 1 输出 16 1 3 思路: 依据题意,再看数据范围,可以知道暴力肯定是不可能了,然后通过题目意思,我们可以排列模拟一下,这里排列所得结…

Decord库快速抽帧

Decord比Opencv块6倍!! 1. 使用教程 读取视频 # 1、读取使用 from decord import VideoReader from decord import cpu, gpuvr VideoReader(tiny-Kinetics-400\\abseiling\\_4YTwq0-73Y_000044_000054.mp4, ctxcpu(0))print(video frames:, len(vr)…

ArcGIS API for JavaScript 4.x 实现动态脉冲效果

1. 设计思路 主要通过定时刷新,每一次的脉冲渲染圈不停的放大,并且透明度缩小,直到达到一定的大小再退回0。 2. 实现代码 import MapView from "arcgis/core/views/MapView"; import GraphicsLayer from "arcgis/core/laye…

数学建模B多波束测线问题B

数学建模多波束测线问题 1.问题重述: 单波束测深是一种利用声波在水中传播的技术来测量水深的方法。它通过测量从船上发送声波到声波返回所用的时间来计算水深。然而,由于它是在单一点上连续测量的,因此数据在航迹上非常密集,但…

云备份——服务端客户端联合测试

一,准备工作 服务端清空备份文件信息、备份文件夹、压缩文件夹 客户端清空备份文件夹 二,开始测试 服务端配置文件 先启动服务端和客户端 向客户端指定文件夹放入稍微大点的文件,方便后续测试断点重传 2.1 上传功能测试 客户端自动上传成功…

【Altium Designer】AD20教程,实战,作图(一)

文章目录 完整制图方法1、建立一个完整的PCB工程,需要有sch文件、pcb文件、schlib文件、pcblib文件,后面两个不是必须的,后面两个用来自己创建库里面没有的东西。2、这个时候就可以画 原理图 ,这里我提一下库这个东西。3、画原理图4、编译原理…

系统架构设计师(第二版)学习笔记----计算机语言

【原文链接】系统架构设计师(第二版)学习笔记----计算机语言 文章目录 一、计算机语言的组成1.1 计算机语言的分类 二、机器语言2.1 机器语言指令信息2.2 机器语言指令格式的种类 三、汇编语言3.1 汇编语言中语句种类3.2 汇编语言指令和伪指令的语句格式…