电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于Python的Jenkins的二次開發操作

瀏覽:5日期:2022-07-25 18:03:03

背景

最近我們在整一個云執行的平臺,底層用的是Jenkins來做執行引擎,方便的把我們的腳本做一個統一的調度。

Jenkins確實是一個非常方便的框架,它提供了一整套的RESTful的API,可以非常方便的做二次開發,而且提供了一個python的庫,操作起來就更加方便了。

常用的Jenkins概念

我們在使用Jenkins的時候,一般看到的都是Jenkins的View。

也就是說我們看到的基本上都是一些視圖。

每一個構建的內容,無論是執行用例,跑腳本,還是打包編譯發布,都是一個job。

每一個job都有一個對應的name,如果這個job被放在某個文件夾了,那么name就是文件夾名+job名。在查看job信息的時候,會返回一個full_name字段,指的就是這個了。

PythonSDK

pip install python-jenkins執行這條命令就可以安裝SDK了。

官網:https://pypi.org/project/python-jenkins/

說明文檔:http://python-jenkins.readthedocs.io/en/latest/

說明文檔都是英文的,如果有興趣,看這塊當然最好,不過這個SDK實際上非常非常的簡單,如果直接去看源代碼,也是沒問題的,我在開發的過程中,基本上都是去看源碼來寫的,SDK里面函數命名比較直白,不用深刻理解也能夠正常的去使用。

這里列一些比較常用的方法,也是我這次開發的時候用到的一些,我按照我自己寫的過程中,一步一步的寫出來。

開發過程

job信息查詢

在Jenkins中,每一個構建都是一個job,所以,我們做開發的時候,要在頁面上展示歷史的構建信息,因此,要能夠拿到歷史執行job的信息。因此我們要使用get_job_info這個方法。

def get_job_info(self, name, depth=0, fetch_all_builds=False): ’’’Get job information dictionary. :param name: Job name, ``str`` :param depth: JSON depth, ``int`` :param fetch_all_builds: If true, all builds will be retrieved from Jenkins. Otherwise, Jenkins will only return the most recent 100 builds. This comes at the expense of an additional API call which may return significant amounts of data. ``bool`` :returns: dictionary of job information ’’’

這里的name參數指的是job的名字,比如我新建了一個叫自動化測試這么個job,那么這個name傳的就是自動化測試,如果我把這個job放到了某個文件夾中,那么name這個參數需要傳文件夾名/自動化測試。

這里有一個坑,在Python2.7版本中傳遞這個name,如果以變量的形式傳遞過去,會有一個報錯,規避的方法是name.encode(’utf-8’)做一下編碼的處理。返回的參數是這些:

在builds字段里面就存有所有的歷史構建數據。在property這個字段中放有Jenkins構建時的各種參數。

構建日志

拿到了構建數據,我們需要在頁面上展示出來,如果能在頁面上直接看日志就更方便了,因此要把每次的構建日志拿出來,需要調用get_build_console_output這個方法。

def get_build_console_output(self, name, number): ’’’Get build console text. :param name: Job name, ``str`` :param number: Build number, ``int`` :returns: Build console output, ``str`` ’’’

這里可以拿到Jenkins的構建日志,返回的就是一個字符串了。需要注意的是,如果你想要構建的時候也展示構建日志,只需要在構建的時候調用這個方法就行,會返回調用時候構建的日志,用socket或者輪詢的方式都可以實現實時日志的展示。

執行構建

執行構建當然是非常關鍵的一步,我們可以使用build_job這個方法來執行構建。

def build_job(self, name, parameters=None, token=None): ’’’Trigger build job. This method returns a queue item number that you can pass to :meth:`Jenkins.get_queue_item`. Note that this queue number is only valid for about five minutes after the job completes, so you should get/poll the queue information as soon as possible to determine the job’s URL. :param name: name of job :param parameters: parameters for job, or ``None``, ``dict`` :param token: Jenkins API token :returns: ``int`` queue item ’’’

這里的name參數跟job信息查詢的參數一樣,也會有編碼的問題。parameters字段傳入的是一個字典類型,也就是在頁面上點擊構建的時候,需要填入的參數。token參數在Jenkins這個類初始化的時候就已經有了,所以一般來說無需傳入。這個方法會返回一個queue_item的編號,這個就是Jenkins的構建編號,這個編號可以做一些其他數據的查詢,比如構建狀態,取消構建等操作,在SDK里面都有對應的方法。

注意:絕對不行用這個來查詢是否處于構建中,這個編號在一定時間內會出現失效的情況,如果構建時間過長,會導致查詢不到結果而報錯,實際上job依然處于構建中

這些方法使用起來比較方便,但是有一些局限性,我們如果在構建的時候用了第三方插件,這些方法是沒辦法拿到第三方插件的結果的,比如我們這里用RobotFramework的插件來處理了結果,用這些方法是沒辦法拿到結果的。

從原理入手

Jenkins對外提供的是一個RESTful的接口,那么Python的SDK做的動作實際上就是去請求這個接口,只不過做了一些包裝,保證了易用性,很多方法的核心,都會用到jenkins_request,比如:

response = self.jenkins_request(requests.Request(’POST’, self.build_job_url(name, parameters, token)))

有興趣的可以自己去讀一讀源碼,整個SDK實際上就是基于requests這個庫做了一下包裝,然后最終都是通過jenkins_request去請求RESTful的API。我們進入jenkins的頁面,在右下角能看到一個這樣的東西。

有這個標記的頁面,就是有接口的,那么這個接口是怎么拿的呢?

從源碼里面可以找到答案,很多方法里面都有這么樣一個東西。

self.jenkins_open(requests.Request(’GET’, self._build_url(INFO),auth=auth), add_crumb=False, resolve_auth=False)response = self.jenkins_open(requests.Request(’GET’, self._build_url(BUILD_INFO,locals())))

在最上方的配置中可以找到:

INFO = ’api/json’

也就是說,在我們看到頁面的后方加上/api/json就可以拿到數據了。

所有的操作都在這個數據的背后了,也就是說只要寫好這個url的拼接規則,就能很簡單的去做二次開發了。

當然,在開發的過程中,也是有很多坑的,比如拿歷史數據的時候,接口竟然不返回歷史構建的狀態。。。。

總結

整個開發過程下來還算比較順利,由于源碼比較簡單的原因,基本上遇到問題都能通過看源碼來解決,但是比較大的問題就是返回結果的枚舉沒有一個地方列出來,所以導致開發完成后經常有地方需要修修補補。

以上這篇基于Python的Jenkins的二次開發操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 滚塑PE壳体-PE塑料浮球-警示PE浮筒-宁波君益塑业有限公司 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 无缝钢管-聊城无缝钢管-小口径无缝钢管-大口径无缝钢管 - 聊城宽达钢管有限公司 | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 工作心得_读书心得_学习心得_找心得体会范文就上学道文库 | 灌木树苗-绿化苗木-常绿乔木-价格/批发/基地 - 四川成都途美园林 | 开云(中国)Kaiyun·官方网站-登录入口| 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 蜂窝块状沸石分子筛-吸附脱硫分子筛-萍乡市捷龙环保科技有限公司 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 动物麻醉机-数显脑立体定位仪-北京易则佳科技有限公司 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 办公室装修_上海办公室设计装修_时尚办公新主张-后街印象 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 橡胶粉碎机_橡胶磨粉机_轮胎粉碎机_轮胎磨粉机-河南鼎聚重工机械制造有限公司 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 老城街小面官网_正宗重庆小面加盟技术培训_特色面馆加盟|牛肉拉面|招商加盟代理费用多少钱 | 渣土车电机,太阳能跟踪器电机,蜗轮蜗杆减速电机厂家-淄博传强电机 | Brotu | 关注AI,Web3.0,VR/AR,GPT,元宇宙区块链数字产业 | 四川成人高考_四川成考报名网 | RTO换向阀_VOC高温阀门_加热炉切断阀_双偏心软密封蝶阀_煤气蝶阀_提升阀-湖北霍科德阀门有限公司 | 标策网-专注公司商业知识服务、助力企业发展 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂 | 1000帧高速摄像机|工业高速相机厂家|科天健光电技术 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 短信群发平台_群发短信软件_短信营销-讯鸽科技 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 楼承板设备-楼承板成型机-免浇筑楼承板机器厂家-捡来 | 顶呱呱交易平台-行业领先的公司资产交易服务平台 | 通用磨耗试验机-QUV耐候试验机|久宏实业百科 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 杭州货架订做_组合货架公司_货位式货架_贯通式_重型仓储_工厂货架_货架销售厂家_杭州永诚货架有限公司 | 亳州网络公司 - 亳州网站制作 - 亳州网站建设 - 亳州易天科技 | 云南外加剂,云南速凝剂,云南外加剂代加工-普洱澜湄新材料科技有限公司 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | 我车网|我关心的汽车资讯_汽车图片_汽车生活!| 优宝-汽车润滑脂-轴承润滑脂-高温齿轮润滑油脂厂家 |