python-jenkins文件對象傳輸

不帶文件執行jenkins

# curl -X POST http://<-ip->:<-port->/job/<-job工作名->/build --user <-請求用戶名->:<-token值-> --form json='{"parameter": [{"name": <-參數1的名字->, "value": <-參數1的值->}, {"name": <-參數2的名字->, "value":<-參數2的值->}]}'
param_dict = {
	<-參數1的名字->: <-參數1的值->,
	<-參數2的名字->: <-參數2的值->
}

# jenkins_server_url  格式---- http://ip:port/
# use_id  請求用戶名
# api_token 請求token
server = jenkins.Jenkins(jenkins_server_url, username=use_id, password=api_token)

# str_change job工作名 
# param_dict form表單傳的參數
server.build_job(str_change, parameters=param_dict, token=api_token)

帶文件對象執行jenkins

# curl -X POST http://<-ip->:<-port->/job/<-job工作名->/build --user <-請求用戶名->:<-token值-> --form json='{"parameter": [{"name": <-參數1的名字->, "value": <-參數1的值->}, {"name": <-參數2的名字->, "value":<-參數2的值->}, {"name":<-文件參數名字->, "file":<-給文件起的文字->}]}' --form <-給文件起的名字(不帶引號)->=@<-文件的絕對路徑->

# 待測試
import requests

payload = ( 
	('file0', open("FILE_LOCATION_ON_LOCAL_MACHINE", "rb")),
	('json', '{ "parameter": [
						{"name":"FILE_LOCATION_AS_SET_IN_JENKINS", "file":"file0" }...
						]}')
)

resp = requests.post("JENKINS_URL/job/JOB_NAME/build", 
                   auth=('username','password'), 
                   headers={"Jenkins-Crumb":"9e1cf46405223fb634323442a55f4412"}, 
                   files=payload )

直接使用系統執行curl語句

# 這裏碰到了一個坑, 單引號裏用雙引號裏面複用單引號或者雙引號都報錯, 解決方法使用format
param_dict = {
	<-參數1的名字->: <-參數1的值->,
	<-參數2的名字->: <-參數2的值->
}
str_post = 'curl -X POST {}job/{}/build --user {}:{} --form json="{}" --form file0=@{}'.format(jenkins_server_url, str_change, use_id, api_token, str(param_dict), <-文件的絕對路徑->)
os.popen(str_post)

更多解決方法參照

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