我正在使用以下命令行调用在jenkins CLI服务器上执行groovy脚本:
curl --user 'Knitschi:myPassword' -H "Jenkins-Crumb:1234" --data-urlencode "script=println 'Hello nice jenkins-curl-groovy world!'" localhost:8080/scriptText
我目前正致力于将我的bash脚本转换为python,并且我希望使用python requests 包(http://docs.python-requests.org/en/master/)进行上述调用。
到目前为止我已经
了import requests
url = 'http://localhost:8080/scriptText'
myAuth = ('Knitschi', 'myPassword')
crumbHeader = { 'Jenkins-Crumb' : '1234'}
scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"
response = requests.post(url, auth=myAuth, headers=crumbHeader, data=scriptData)
print(response.text)
response.raise_for_status()
虽然命令行打印了预期的字符串,但python代码却没有。 它也不会引发异常。
此外,我不确定是否应使用requests.get()
或requests.post()
。我的网络技术知识非常有限。
感谢您的时间。
答案 0 :(得分:1)
在.resizable()
参数中传递字符串时,data
会将其发布而不对其进行编码。
您可以使用quote_plus
对发布数据进行编码,
requests
或由'&'拆分和'='来创建字典。
scriptData = "script=println 'Hello cruel jenkins-python-groovy world!'"
scriptData = urllib.parse.quote_plus(scriptData, '=')
答案 1 :(得分:0)
使用
import requests
url = 'http://localhost:8080/scriptText'
myAuth = ('Knitschi', 'myPassword')
crumbHeader = { 'Jenkins-Crumb' : '1234'}
groovyScript = "println 'Hello cruel jenkins-python-groovy world!'"
scriptData = { "script" : groovyScript}
response = requests.post(url, auth=myAuth, headers=crumbHeader, data=scriptData)
print(response.text)
response.raise_for_status()
至少适用于本例中的groovy脚本以及我在现实中使用的脚本。但是,这里似乎缺少 urlencode 功能,因此我不确定这是否适用于所有给定的groovy脚本。