日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

基于Python的Jenkins的二次開發(fā)操作

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

背景

最近我們在整一個云執(zhí)行的平臺,底層用的是Jenkins來做執(zhí)行引擎,方便的把我們的腳本做一個統(tǒng)一的調(diào)度。

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

常用的Jenkins概念

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

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

每一個構(gòu)建的內(nèi)容,無論是執(zhí)行用例,跑腳本,還是打包編譯發(fā)布,都是一個job。

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

PythonSDK

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

官網(wǎng):https://pypi.org/project/python-jenkins/

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

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

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

開發(fā)過程

job信息查詢

在Jenkins中,每一個構(gòu)建都是一個job,所以,我們做開發(fā)的時候,要在頁面上展示歷史的構(gòu)建信息,因此,要能夠拿到歷史執(zhí)行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參數(shù)指的是job的名字,比如我新建了一個叫自動化測試這么個job,那么這個name傳的就是自動化測試,如果我把這個job放到了某個文件夾中,那么name這個參數(shù)需要傳文件夾名/自動化測試。

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

在builds字段里面就存有所有的歷史構(gòu)建數(shù)據(jù)。在property這個字段中放有Jenkins構(gòu)建時的各種參數(shù)。

構(gòu)建日志

拿到了構(gòu)建數(shù)據(jù),我們需要在頁面上展示出來,如果能在頁面上直接看日志就更方便了,因此要把每次的構(gòu)建日志拿出來,需要調(diào)用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的構(gòu)建日志,返回的就是一個字符串了。需要注意的是,如果你想要構(gòu)建的時候也展示構(gòu)建日志,只需要在構(gòu)建的時候調(diào)用這個方法就行,會返回調(diào)用時候構(gòu)建的日志,用socket或者輪詢的方式都可以實現(xiàn)實時日志的展示。

執(zhí)行構(gòu)建

執(zhí)行構(gòu)建當(dāng)然是非常關(guān)鍵的一步,我們可以使用build_job這個方法來執(zhí)行構(gòu)建。

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參數(shù)跟job信息查詢的參數(shù)一樣,也會有編碼的問題。parameters字段傳入的是一個字典類型,也就是在頁面上點擊構(gòu)建的時候,需要填入的參數(shù)。token參數(shù)在Jenkins這個類初始化的時候就已經(jīng)有了,所以一般來說無需傳入。這個方法會返回一個queue_item的編號,這個就是Jenkins的構(gòu)建編號,這個編號可以做一些其他數(shù)據(jù)的查詢,比如構(gòu)建狀態(tài),取消構(gòu)建等操作,在SDK里面都有對應(yīng)的方法。

注意:絕對不行用這個來查詢是否處于構(gòu)建中,這個編號在一定時間內(nèi)會出現(xiàn)失效的情況,如果構(gòu)建時間過長,會導(dǎo)致查詢不到結(jié)果而報錯,實際上job依然處于構(gòu)建中

這些方法使用起來比較方便,但是有一些局限性,我們?nèi)绻跇?gòu)建的時候用了第三方插件,這些方法是沒辦法拿到第三方插件的結(jié)果的,比如我們這里用RobotFramework的插件來處理了結(jié)果,用這些方法是沒辦法拿到結(jié)果的。

從原理入手

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

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

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

有這個標(biāo)記的頁面,就是有接口的,那么這個接口是怎么拿的呢?

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

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就可以拿到數(shù)據(jù)了。

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

當(dāng)然,在開發(fā)的過程中,也是有很多坑的,比如拿歷史數(shù)據(jù)的時候,接口竟然不返回歷史構(gòu)建的狀態(tài)。。。。

總結(jié)

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩大片在线| 日韩成人三级| 国产在线观看91一区二区三区| 亚洲有吗中文字幕| 婷婷中文字幕一区| 欧美日韩国产一区精品一区| 在线亚洲成人| 亚洲日本在线观看视频| 日本欧美韩国一区三区| 欧美三区不卡| 国产精品久久久久9999高清| 国产精品欧美一区二区三区不卡| 国产精品久av福利在线观看| 麻豆国产精品777777在线| 久久精品国产久精国产| 大香伊人久久精品一区二区 | 国产精品一线| 国产精品**亚洲精品| 久久国产精品美女| 久久99国产精品视频| 超级白嫩亚洲国产第一| 亚洲天堂免费电影| 五月婷婷亚洲| 最近国产精品视频| 国产精品一区亚洲| 97视频热人人精品免费| 激情五月色综合国产精品| 麻豆久久精品| 欧美日韩99| 成人台湾亚洲精品一区二区| 久久久夜夜夜| 99精品99| 日韩av一级片| 91偷拍一区二区三区精品| 欧美+亚洲+精品+三区| 亚洲精品婷婷| 国产第一亚洲| 日韩视频久久| 欧美色综合网| 在线日韩中文| 亚洲综合五月| 国产 日韩 欧美 综合 一区| 亚洲精华国产欧美| 欧美在线精品一区| 蜜臀久久精品| 日韩中文字幕| 另类专区亚洲| 中文字幕亚洲精品乱码| 精品黄色一级片| 日韩午夜av在线| 国产欧美日韩视频在线| 亚洲精品88| 日韩一区精品| 久久久亚洲一区| 国产美女亚洲精品7777| 欧美va天堂| 欧美国产视频| 亚洲激情国产| 成人午夜网址| 日本一区二区三区视频在线看| 日韩大片在线| 日韩精品欧美成人高清一区二区| 国产69精品久久| 日本亚洲不卡| 午夜欧美精品久久久久久久| 国产精品任我爽爆在线播放| 国产亚洲毛片| 极品av在线| 欧美亚洲一级| 欧美日韩免费观看一区=区三区| 久久久亚洲欧洲日产| 久久午夜影视| 欧美精品高清| 国产精品超碰| 一区二区三区网站| 久久天堂成人| 麻豆国产精品视频| 蜜臀av亚洲一区中文字幕| 9999国产精品| 国产精品激情电影| 国产日韩在线观看视频| 国产精品普通话对白| 9999国产精品| 免费精品一区| 日本亚洲欧洲无免费码在线| 91九色精品| 国内自拍视频一区二区三区| 日韩成人一级| 综合亚洲自拍| 爽爽淫人综合网网站| 免费观看久久av| 色乱码一区二区三区网站| 日本va欧美va欧美va精品| 日韩中文字幕亚洲一区二区va在线| 九色porny丨国产首页在线| 国产精品久久久网站| 天堂俺去俺来也www久久婷婷| 蜜桃视频欧美| 成人va天堂| 国产网站在线| 精品国产18久久久久久二百| 欧美私人啪啪vps| 天堂精品久久久久| 蜜桃久久久久久| 国产精品美女久久久浪潮软件| 在线日韩视频| 99精品网站| 伊人久久高清| 日韩一区二区在线免费| 四虎国产精品免费观看| 国产精品theporn| 国产日韩欧美高清免费| 日韩精品久久久久久久软件91| 蜜桃久久av| 视频一区视频二区中文| 久久xxxx精品视频| 亚洲一区日韩| 亚洲一区日韩| 蜜臀av一区二区在线免费观看| 国产农村妇女精品一二区| 在线综合亚洲| 免费黄色成人| 尤物在线精品| 亚洲欧美视频| 免费看黄色91| 亚洲日韩视频| 日韩av中文字幕一区| 国产亚洲精品精品国产亚洲综合| 青青草伊人久久| 欧美日韩a区| 久久影院资源站| аⅴ资源天堂资源库在线| 久久91导航| 激情综合激情| 中文精品在线| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲精品福利| 亚洲tv在线| 国产欧美激情| 国产一区二区三区黄网站| 日韩在线欧美| 蜜桃视频欧美| 亚洲一区导航| 欧美在线黄色| 韩日一区二区| 亚洲二区视频| 亚洲深夜福利在线观看| 国产欧美午夜| 在线中文字幕播放| 欧美1区免费| 亚洲区国产区| 国产精品亚洲综合在线观看| 国产精品日韩精品在线播放| 精品久久电影| 99免费精品| 免费观看在线综合| 日韩高清在线不卡| 国产福利91精品一区二区| 九九综合在线| 欧美午夜三级| 九九精品调教| 免费观看在线色综合| 欧美国产极品| 99热精品久久| 日韩av网站免费在线| 国产乱码午夜在线视频| 国产精品日本| 国产美女久久| 日韩电影二区| 一区二区电影| 国产福利片在线观看| 99国内精品| 国产乱码精品一区二区三区四区| 免费在线成人| 免费黄色成人| 国产精品巨作av| 国产一区二区久久久久| 性欧美69xoxoxoxo| 欧美一区网站| 欧美日韩尤物久久| 日韩在线观看一区二区三区| 国产a亚洲精品| 婷婷久久一区| 久久av日韩| 久久国产精品99国产| 麻豆成人91精品二区三区| 欧美精品一二| 国产劲爆久久| 中文一区在线| 久久三级中文| 蜜臀av一区二区三区| 国内精品美女在线观看| 午夜久久tv| 久久午夜影院| 在线精品一区| 91日韩在线| 日本综合精品一区| www.51av欧美视频| 日本精品在线播放| 亚洲特级毛片|