我试图通过执行以下操作使用shell脚本触发一些构建:
export url='http://test.com';
export job_name='MY_JOB_NAME';
jso="{\"parameter\": [{\"name\":\"BRANCH\",\"value\":\"master\"}, {\"name\":\"GITURL\",\"value\":\"https://github.test.com/test/test.git\"}]}";
curl $url/job/$job_name/build --data-urlencode json="$jso";
这很好用,但是当我尝试将它转换为python等价物时,它似乎没有触发URL:
import requests
import json
url='http://test.com/job/MY_JOB_NAME/build'
params={'name':'release_1.5', 'GITURL':'https://github.test.com/test/test.git'}
payload = json.dumps(params)
resp = requests.get(url=url, data=payload)
执行时没有任何错误,但它不会触发我的CI机器上的构建。
答案 0 :(得分:1)
这里有很多你做错的事情。我希望显而易见的第一件事是你发送的JSON数据完全不同。
除此之外,您在这里遇到的主要问题是您的curl正在使用BODY中的urlencoded数据进行POST,并且您的python请求正在使用urlencoded数据作为URL中的单独参数进行GET。将.get更改为.post,将params =更改为data =,您应该更接近预期的目标。
resp = requests.post(url=url, data={'json':payload})
另请注意,我将您的有效负载嵌入到json中的密钥中,因为这是您的卷曲中发生的事情。我并不完全了解您的实施细节,但我希望这有助于您走上正确的道路。
答案 1 :(得分:-1)
将内容类型添加到请求的标题中,即:
headers = {'content-type': 'application/json'}
...
resp = requests.get(url=url, params=payload, headers=headers)