[Python]通過 python-jenkins 啟動需要參數的job | jenkins接口


需求:

我要用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(nameparameters=Nonetoken=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:
  • name – name of job
  • parameters – parameters for job, or Nonedict
  • token – Jenkins API token
Returns:

int queue item

get_build_console_output(namenumber)

Get build console text.

Parameters:
  • name – Job name, str
  • number – Build number, int
Returns:

Build console output, str

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM