最近在工作中需要用到在後端代碼中觸發Jenkins任務的構建,於是想到Jenkins是否有一些已經封裝好的API類庫提供,用於處理跟Jenkins相關的操作。
由於我們的後端項目是基於python開發的,所以需要python能調用的類庫。經過一些調研鎖定了"python-jenkins"這個類庫。
本文會介紹,"python-jenkins"的一些基礎操作,這些操作基本上能滿足工作中絕大使用場景。
python-jenkins是Jenkins REST API的Python包裝器,旨在提供一種更傳統的Python 方式來控制Jenkins服務器。它提供了一個更高級別的 API,其中包含許多便利功能。
在日常使用中,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
需要定義遠程的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在配置的時候,不需要任何構建參數,直接點構建即可。
代碼如下:
server.build_job(name='android_dev')
帶構建參數,這個job在配置的時候,會配置需要的構建參數,如下圖:
代碼如下:
param_dict = {"name": "mike"}
server.build_job(name='android_dev_parameters', parameters=param_dict)
如構建成功,查看控制台輸出,能看到代碼中傳遞的參數"mike"。
jenkins中比較常用的job是自由風格的job,特點是job配置可以使用shell腳本執行一些參數。
需要唯一的job名稱,如果已存在的job會報錯。
還需要配置文件模版,提供字符串模版,如下圖:
代碼如下:
print(server.create_job(name='android_dev_temp', config_xml=Jenkins_TEMP))
在jenkins2.x開始流行pipeline的寫法,以代碼的方式來進行job的構建。
從使用上其實和普通job配置,沒什麼太大區別。
pipeline的配置模版如下圖:
代碼如下:
print(server.create_job(name='android_dev_temp_pipeline', config_xml=pipelineBuildTemp))
查詢job信息的名字必須是存在的,如果不存在會報錯。
代碼如下:
print(server.get_job_info(name='android_dev_parameters'))
查詢出來的信息,包含了描述、任務狀態、構建節點等信息。
在構建完成任務後,不會返回構建號,所以需要執行獲取job的最後次構建號的方法。
通過get_job_info方法的返回數據結構中可以拿到最後次構建號。
代碼如下:
#獲取job名為job_name的job的最後次構建號
print(server.get_job_info(name='android_dev_parameters')['lastBuild']['number'])
輸出: 3
代碼如下:
#獲取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'])
結果狀態有幾種狀態:
代碼如下:
print(server.get_build_info(name='android_dev_parameters',number=build_number)['building'])
構建狀態有幾種狀態:
代碼如下:
print(server.get_build_console_output(name="auto_blog", number=14))
在之前的項目中,我們會把接口自動化測試、性能壓測腳本配置在jenkins服務器上,後端服務的業務邏輯中會動態創建job、構建job、查看構建日志等。
python-jenkins的出現極大了提高的操作jenkins的便捷性,希望大家工作中能用到~