欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年05月12日 09:33:38   作者:點(diǎn)點(diǎn)寒彬  
這篇文章主要介紹了基于Python的Jenkins的二次開(kāi)發(fā)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

背景

最近我們?cè)谡粋€(gè)云執(zhí)行的平臺(tái),底層用的是Jenkins來(lái)做執(zhí)行引擎,方便的把我們的腳本做一個(gè)統(tǒng)一的調(diào)度。

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

常用的Jenkins概念

我們?cè)谑褂肑enkins的時(shí)候,一般看到的都是Jenkins的View。

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

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

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

PythonSDK

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

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

說(shuō)明文檔:http://python-jenkins.readthedocs.io/en/latest/

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

這里列一些比較常用的方法,也是我這次開(kāi)發(fā)的時(shí)候用到的一些,我按照我自己寫(xiě)的過(guò)程中,一步一步的寫(xiě)出來(lái)。

開(kāi)發(fā)過(guò)程

job信息查詢(xún)

在Jenkins中,每一個(gè)構(gòu)建都是一個(gè)job,所以,我們做開(kāi)發(fā)的時(shí)候,要在頁(yè)面上展示歷史的構(gòu)建信息,因此,要能夠拿到歷史執(zhí)行job的信息。因此我們要使用get_job_info這個(gè)方法。

 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的名字,比如我新建了一個(gè)叫自動(dòng)化測(cè)試這么個(gè)job,那么這個(gè)name傳的就是自動(dòng)化測(cè)試,如果我把這個(gè)job放到了某個(gè)文件夾中,那么name這個(gè)參數(shù)需要傳文件夾名/自動(dòng)化測(cè)試。

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

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

構(gòu)建日志

拿到了構(gòu)建數(shù)據(jù),我們需要在頁(yè)面上展示出來(lái),如果能在頁(yè)面上直接看日志就更方便了,因此要把每次的構(gòu)建日志拿出來(lái),需要調(diào)用get_build_console_output這個(gè)方法。

 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è)字符串了。需要注意的是,如果你想要構(gòu)建的時(shí)候也展示構(gòu)建日志,只需要在構(gòu)建的時(shí)候調(diào)用這個(gè)方法就行,會(huì)返回調(diào)用時(shí)候構(gòu)建的日志,用socket或者輪詢(xún)的方式都可以實(shí)現(xiàn)實(shí)時(shí)日志的展示。

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

執(zhí)行構(gòu)建當(dāng)然是非常關(guān)鍵的一步,我們可以使用build_job這個(gè)方法來(lái)執(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信息查詢(xún)的參數(shù)一樣,也會(huì)有編碼的問(wèn)題。parameters字段傳入的是一個(gè)字典類(lèi)型,也就是在頁(yè)面上點(diǎn)擊構(gòu)建的時(shí)候,需要填入的參數(shù)。token參數(shù)在Jenkins這個(gè)類(lèi)初始化的時(shí)候就已經(jīng)有了,所以一般來(lái)說(shuō)無(wú)需傳入。這個(gè)方法會(huì)返回一個(gè)queue_item的編號(hào),這個(gè)就是Jenkins的構(gòu)建編號(hào),這個(gè)編號(hào)可以做一些其他數(shù)據(jù)的查詢(xún),比如構(gòu)建狀態(tài),取消構(gòu)建等操作,在SDK里面都有對(duì)應(yīng)的方法。

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

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

從原理入手

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

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

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

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

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

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'

也就是說(shuō),在我們看到頁(yè)面的后方加上/api/json就可以拿到數(shù)據(jù)了。

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

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

總結(jié)

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

以上這篇基于Python的Jenkins的二次開(kāi)發(fā)操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • matlab 計(jì)算灰度圖像的一階矩,二階矩,三階矩實(shí)例

    matlab 計(jì)算灰度圖像的一階矩,二階矩,三階矩實(shí)例

    這篇文章主要介紹了matlab 計(jì)算灰度圖像的一階矩,二階矩,三階矩實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • python使用 multiprocessing 多進(jìn)程處理批量數(shù)據(jù)的示例代碼

    python使用 multiprocessing 多進(jìn)程處理批量數(shù)據(jù)的示例代碼

    這篇文章主要介紹了使用 multiprocessing 多進(jìn)程處理批量數(shù)據(jù)的示例代碼,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Python中使用正則表達(dá)式及正則表達(dá)式匹配規(guī)則詳解

    Python中使用正則表達(dá)式及正則表達(dá)式匹配規(guī)則詳解

    這篇文章主要介紹了Python中使用正則表達(dá)式以及正則表達(dá)式匹配規(guī)則,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Pyqt5打開(kāi)電腦攝像頭進(jìn)行拍照的實(shí)現(xiàn)示例

    Pyqt5打開(kāi)電腦攝像頭進(jìn)行拍照的實(shí)現(xiàn)示例

    本文介紹了如何使用Pyqt5來(lái)控制攝像頭拍照,通過(guò)構(gòu)建一個(gè)簡(jiǎn)單的用戶(hù)界面,我們可以實(shí)現(xiàn)從攝像頭實(shí)時(shí)獲取圖像,保存圖片,感興趣的可以了解一下
    2023-08-08
  • python使用技巧-標(biāo)準(zhǔn)輸入

    python使用技巧-標(biāo)準(zhǔn)輸入

    這篇文章主要介紹了python使用技巧標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸入即stdin ,下文圍繞python使用技巧標(biāo)準(zhǔn)輸入相關(guān)資料展開(kāi)學(xué)習(xí)內(nèi)容,具有一的參考價(jià)值,需要的小伙伴可以參考一下
    2022-02-02
  • dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式

    dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式

    今天小編就為大家分享一篇dpn網(wǎng)絡(luò)的pytorch實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • 使用Python對(duì)網(wǎng)易云歌單數(shù)據(jù)分析及可視化

    使用Python對(duì)網(wǎng)易云歌單數(shù)據(jù)分析及可視化

    這篇文章主要介紹了使用Python對(duì)網(wǎng)易云歌單數(shù)據(jù)分析及可視化,本項(xiàng)目以數(shù)據(jù)采集、處理、分析及數(shù)據(jù)可視化為項(xiàng)目流程,需要的朋友可以參考下
    2023-03-03
  • Python使用Tkinter庫(kù)如何設(shè)置tkinter ttk框架背景顏色

    Python使用Tkinter庫(kù)如何設(shè)置tkinter ttk框架背景顏色

    本文介紹了在Python的Tkinter庫(kù)中,如何使用style.configure方法為ttk框架設(shè)置背景顏色及其他樣式屬性,以定制美觀(guān)的GUI界面
    2024-09-09
  • scrapy-redis源碼分析之發(fā)送POST請(qǐng)求詳解

    scrapy-redis源碼分析之發(fā)送POST請(qǐng)求詳解

    這篇文章主要給大家介紹了關(guān)于scrapy-redis源碼分析之發(fā)送POST請(qǐng)求的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用scrapy-redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 老生常談Python中的Pickle庫(kù)

    老生常談Python中的Pickle庫(kù)

    pickle是python語(yǔ)言的一個(gè)標(biāo)準(zhǔn)模塊,安裝python后已包含pickle庫(kù),不需要單獨(dú)再安裝。這篇文章主要介紹了Python中的Pickle庫(kù),需要的朋友可以參考下
    2022-01-01

最新評(píng)論