需求:
我要用python通過api,啟動這個job,並且啟動這個job需要1個參數
安裝依賴:
pipenv install python-jenkins
熟悉API的使用方法:
了解一個API的最好辦法,就是先看它的 官方文檔,
從中找到自己需要的方法 ,弄明白要給方法傳什么參,參數類型,返回值類型
然后再做一個小demo,驗證自己的想法,順便也能熟悉一下這個api
我從官方文檔中找到下面這3個方法,正是我需要的:
- build_job用來啟動job
- get_build_console_output用來獲取job的構建日志
- get_queu_info用來獲取 pending狀態 的job
build_job(name, parameters=None, token=None)
Trigger build job.
This method returns a queue item number that you can pass to 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.
| Parameters: |
|
|---|---|
| Returns: |
|
get_build_console_output(name, number)
Get build console text.
| Parameters: |
|
|---|---|
| Returns: | Build console output, |
-
get_queue_info() -
Returns: list of job dictionaries, [dict]- Example::
-
>>> queue_info = server.get_queue_info() >>> print(queue_info[0]) {u'task': {u'url': u'http://your_url/job/my_job/', u'color': u'aborted_anime', u'name': u'my_job'}, u'stuck': False, u'actions': [{u'causes': [{u'shortDescription': u'Started by timer'}]}], u'buildable': False, u'params': u'', u'buildableStartMilliseconds': 1315087293316, u'why': u'Build #2,532 is already in progress (ETA:10 min)', u'blocked': True}
創建測試工程:
接下來創建1個測試job,驗證自己的想法
啟動該job,需要傳遞1個字符型參數,參數名是Para1,默認值是:參數1

在shell中打印Para1的參數值:

代碼示例:
import jenkins #定義遠程的jenkins master server 的url以及Port jenkins_server_url = 'http://10.2.1.92:8080/jenkins/' #定義用戶的userid 和 apitoken(在jenkins中生成) user_id = 'admin' api_token = '11d8c79994b1e6d554c857b1d96fcf4dfe' #測試服務器 #實例化jenkins對象,連接遠程的jenkins master server server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token) print(server) name ='pubTest1' parameters={'Para1':'Python啟動帶參數的job'} #dict類型
#構建job(帶參數) server.build_job(name,parameters)
構建結果:

這樣就通過 python啟動了帶參數的job
接下來,通過get_build_console_output方法 打印job的構建日志
#獲取job的最后次構建號 lastbuildNumber=server.get_job_info(name)['lastBuild']['number'] #輸出構建日志 log=server.get_build_console_output(name,lastbuildNumber)
print(log)
結果如下:
由用戶 admin 啟動 構建中 在工作空間 /root/.jenkins/workspace/pubTest1 中 [pubTest1] $ /bin/sh -xe /usr/local/tomcat/apache-tomcat-8.5.40/temp/jenkins3208269061259629186.sh + echo Python啟動帶參數的job Python啟動帶參數的job Finished: SUCCESS
最后,通過get_queue_info獲取pending狀態的job列表
使用場景:
通過 api啟動job后,這個job會有一段pending狀態,這個時間如果用get_build_info是獲取不到正在pending狀態job信息的.
所以可以這樣判斷:
如果job出現在queue_info中,則等待一段時間再獲取 get_build_info,直到job不出現在queue_info中,則表明job已經啟動成功/失敗.
代碼示例:
#獲取正在排隊構建的job隊列 即pending狀態中的所有job,如果沒有 pending狀態的job即返回1個空列表
queue_info=server.get_queue_info() print(queue_info)
返回值:
{ '_class': 'hudson.model.Queue$WaitingItem', 'actions': [ { '_class': 'hudson.model.ParametersAction', 'parameters': [ { '_class': 'net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterValue', 'name': 'Branch', 'value': 'origin/develop' }, { '_class': 'hudson.model.StringParameterValue', 'name': 'ENV', 'value': 'debugenv' } ] }, { '_class': 'hudson.model.CauseAction', 'causes': [ { '_class': 'hudson.model.Cause$UserIdCause', 'shortDescription': '由用戶admin啟動', 'userId': 'admin', 'userName': 'admin' } ] } ], 'blocked': False, 'buildable': False, 'id': 3427, 'inQueueSince': 1575772564711, 'params': '\nBranch=origin/develop\nENV=debugenv', 'stuck': False, 'task': { '_class': 'hudson.model.FreeStyleProject', 'name': 'export_apk', 'url': 'http: //10.2.1.92: 8080/jenkins/job/export_apk/', 'color': 'aborted' }, 'url': 'queue/item/3427/', 'why': '處於靜默期。截止4.9秒', 'timestamp': 1575772569711 }
關於如何獲取jenkins token和user_id可參考前文:通過jenkins-Python在后台操作Jenkins構建job
