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
上手
安裝
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/]”
解決:照上文,修改全局安全配置爲‘登錄用戶可以做任何事’