程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python操作jenkins初探

編輯:Python

前言

最近在工作中需要用到在後端代碼中觸發Jenkins任務的構建,於是想到Jenkins是否有一些已經封裝好的API類庫提供,用於處理跟Jenkins相關的操作。

由於我們的後端項目是基於python開發的,所以需要python能調用的類庫。經過一些調研鎖定了"python-jenkins"這個類庫。

本文會介紹,"python-jenkins"的一些基礎操作,這些操作基本上能滿足工作中絕大使用場景。

介紹

python-jenkins是Jenkins REST API的Python包裝器,旨在提供一種更傳統的Python 方式來控制Jenkins服務器。它提供了一個更高級別的 API,其中包含許多便利功能。

  • 創造新job
  • 復制現有job
  • 刪除job
  • 更新job
  • 獲取job的構建信息
  • 在工作上開始構建
  • 創建節點

在日常使用中,python-jenkins能滿足所有調用jenkins的操作的需求,只有對API使用方法熟練使用,基本上10分鐘就能上手使用。

推薦幾個實用的文檔,使用過程中可以查詢使用。

代碼倉庫: https://github.com/openstack-archive/python-jenkins

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

Doc: http://python-jenkins.readthedocs.io/en/latest/index.html

安裝

推薦使用pip命令行安裝,出現如下圖說明安裝成功。

sudo pip install python-jenkins

常用操作

構建job

創建jenkins連接

需要定義遠程的jenkins master server的url以及port。 jenkins的賬號和密碼,用於連接jenkins服務器。

代碼如下:

# 定義遠程的jenkins master server的url,以及port
jenkins_server_url = 'http://106.75.xxx.xxx:8080/'
# 定義用戶的User Id 和 API Token,獲取方式同上文
user_id = 'admin'
api_token = 'xxxxx'
# 實例化jenkins對象,連接遠程的jenkins master server
server = jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
print(server.get_whoami())

創建jenkins後,返回jenkins實例,通過server就可以調用任何API方法。

構建job(不帶構建參數)

不帶構建參數的job,本身這個job在配置的時候,不需要任何構建參數,直接點構建即可。

代碼如下:

server.build_job(name='android_dev')

構建job(帶構建參數)

帶構建參數,這個job在配置的時候,會配置需要的構建參數,如下圖:

代碼如下:

param_dict = {"name": "mike"}
server.build_job(name='android_dev_parameters', parameters=param_dict)

如構建成功,查看控制台輸出,能看到代碼中傳遞的參數"mike"。

創建job

創建自由風格的job

jenkins中比較常用的job是自由風格的job,特點是job配置可以使用shell腳本執行一些參數。

需要唯一的job名稱,如果已存在的job會報錯。

還需要配置文件模版,提供字符串模版,如下圖:

代碼如下:

print(server.create_job(name='android_dev_temp', config_xml=Jenkins_TEMP))

創建pipeline的job

在jenkins2.x開始流行pipeline的寫法,以代碼的方式來進行job的構建。

從使用上其實和普通job配置,沒什麼太大區別。

pipeline的配置模版如下圖:

代碼如下:

print(server.create_job(name='android_dev_temp_pipeline', config_xml=pipelineBuildTemp))

查詢job

獲取job信息

查詢job信息的名字必須是存在的,如果不存在會報錯。

代碼如下:

print(server.get_job_info(name='android_dev_parameters'))

查詢出來的信息,包含了描述、任務狀態、構建節點等信息。

獲取job的最後次構建號

在構建完成任務後,不會返回構建號,所以需要執行獲取job的最後次構建號的方法。

通過get_job_info方法的返回數據結構中可以拿到最後次構建號。

代碼如下:

#獲取job名為job_name的job的最後次構建號
print(server.get_job_info(name='android_dev_parameters')['lastBuild']['number'])
輸出: 3

獲取job的某次構建的執行結果狀態

代碼如下:

#獲取job名為job_name的job的某次構建的執行結果狀態
build_number = server.get_job_info(name='android_dev_parameters')['lastBuild']['number']
print(server.get_build_info(name='android_dev_parameters', number=build_number)['result'])

結果狀態有幾種狀態:

  • 構建成功:SUCCESS
  • 構建失敗:FAILURE
  • 構建中:None

獲取job的某次構建是否還在構建中

代碼如下:

print(server.get_build_info(name='android_dev_parameters',number=build_number)['building'])

構建狀態有幾種狀態:

  • 構建中: True
  • 非構建中: False

獲取job的構建日志

代碼如下:

print(server.get_build_console_output(name="auto_blog", number=14))

結語

在之前的項目中,我們會把接口自動化測試、性能壓測腳本配置在jenkins服務器上,後端服務的業務邏輯中會動態創建job、構建job、查看構建日志等。

python-jenkins的出現極大了提高的操作jenkins的便捷性,希望大家工作中能用到~


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved