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

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

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

背景

最近我們在整一個云執(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。我們進入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)常有地方需要修修補補。

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

相關(guān)文章

  • matlab 計算灰度圖像的一階矩,二階矩,三階矩實例

    matlab 計算灰度圖像的一階矩,二階矩,三階矩實例

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

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

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

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

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

    Pyqt5打開電腦攝像頭進行拍照的實現(xiàn)示例

    本文介紹了如何使用Pyqt5來控制攝像頭拍照,通過構(gòu)建一個簡單的用戶界面,我們可以實現(xiàn)從攝像頭實時獲取圖像,保存圖片,感興趣的可以了解一下
    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)資料展開學(xué)習(xí)內(nèi)容,具有一的參考價值,需要的小伙伴可以參考一下
    2022-02-02
  • dpn網(wǎng)絡(luò)的pytorch實現(xiàn)方式

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

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

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

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

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

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

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

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

    老生常談Python中的Pickle庫

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

最新評論