python操作Jinkins

Jenkins不僅有web界面交互,也提供了RestAPI的方式來使用代碼(Python、Java)控制Jenkins的工作流;
可以直接使用curl命令發送接口觸發, Jenkins官網的wiki

簡介

python有現成的輪子,使用python-jenkins庫實現代碼操作jinkins,參考:項目文檔

功能 說明
Create new jobs 創建任務
Copy existing jobs 複製已有任務
Delete jobs 刪除任務
Update jobs 修改任務
Get a job’s build information 獲取任務構建信息
Get Jenkins master version information 獲取Jenkins master版本信息
Get Jenkins plugin information 獲取插件信息
Start a build on a job 構建任務
Create nodes 創建節點
Enable/Disable nodes 啓用/禁用節點
Get information on nodes 獲取節點信息
Create/delete/reconfig views 創建/刪除/編輯 視圖
Put server in shutdown mode (quiet down) 進入關機模式
List running builds 獲取正在運行的所有構建
Delete builds 刪除構建
Wipeout job workspace 清除構建工作區
Create/delete/update folders 創建/刪除/更新 文件夾,需要安裝插件Cloudbees Folders Plugin
Set the next build number 設置下一個構建版本號,需要安裝插件Next Build Number Plugin
Install plugins 安裝插件
and many more…

Jenkins設置

修改Jenkins的“安全設置”

修改全局安全配置爲‘登錄用戶可以做任何事’
修改完後,重啓Jenkins服務

Jenkins用戶的API Token

Jenkins中設置當前登錄用戶的 API Token
修改用戶所屬的API Token

上手

安裝

pip install python-jenkins

使用

	'''
	使用用戶api token登錄
	'''
    url = "http://{}:{}/jenkins/".format(host, port)
    jenkinsApi = jenkins.Jenkins(url, username="admin", password=apiToken)
    
    #獲取任務的最新一次構建版本號
    number = jenkinsApi.get_job_info(jobName)['lastBuild']['number']
    
    #構建任務
    jenkinsApi.build_job(jobName)
    
    #帶參數構建任務
    jenkinsApi.build_job(jobName, {'Tag': tag})

常用案例封裝

def queryTaskStatus(jenkinsApi, jobName:str, number:int):
	#查詢任務狀態
    printLog("query jenkins task status")
    try:
        #獲取構建信息
        # queue_info["building"]=True:構建完成
        # queue_info["result"] == 'SUCCESS':構建成功
        queue_info = jenkinsApi.get_build_info(jobName, number)
        if queue_info["building"]:
            return 0
        elif "testcase" not in jobName and not queue_info["result"] == 'SUCCESS':
            dingTalkNotice("jenkins build fail :{}_{}".format(jobName, number))
        else:
            return 1
    except Exception:
        return 0
def stopLastProcessingTest(jenkinsApi, jobName):
    '''
    獲取最新一次構建,如未完成,停止構建
    '''
    lastBuild = jenkinsApi.get_job_info(jobName)['lastBuild']
    if queryTaskStatus(jenkinsApi, jobName, lastBuild['number']) == 0:

        jenkinsApi.stop_build(jobName, lastBuild['number'])
        printLog("stop the last running jenkins task")
        time.sleep(2)
def getJobInfo(jenkinsServer, jobName):
	'''
	查詢任務詳情,獲取最新一次構建的action參數中的tag
	'''
    number = jenkinsServer.get_job_info(jobName)['lastBuild']['number']
    info = jenkinsServer.get_build_info(jobName, number)
    tag = info["actions"][0]['parameters'][0]['value']
    printLog("{} server lasted tag :{}".format(name, tag))
    return tag

踩坑記錄

1、沒有操作權限,報錯:

jenkins.BadHTTPException: Error communicating with server[http://192.168.1.1:8080/]”

解決:照上文,修改全局安全配置爲‘登錄用戶可以做任何事’

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章