Jenkins中如何将Bash获取的Python输出变量用于curl命令?
问题:Bash调用Python脚本获取变量用于curl时异常(Jenkins环境)
核心现象
在Bash Shell中通过Python脚本输出的数字赋值给变量,将该变量嵌入curl的URL参数时,echo出的命令看似正常,但实际执行返回服务器错误;而手动把数字写入curl命令却能得到正确结果。同时在Jenkins自由风格/多配置项目中,Python脚本读取仓库内的file.json时工作正常,读取Jenkins工作区的file.json则失效。
相关脚本与输出
Bash测试脚本
POST=$(python3 /repo/post.py) echo "${POST}" echo "curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/${POST}/?format=json"" curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/${POST}/?format=json"
执行输出结果
30 curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/30/?format=json" <h1>Server error</h1> <p>An unspecified error occured.</p>
手动执行的正常curl命令
curl -H "Authorization: Bearer ExampleToken" "https://wikipedia.org/api/post/30/?format=json"
Jenkins中的前置操作
Jenkins任务中先通过curl上传文件生成file.json,命令如下:
curl -H "Authorization: Bearer ExampleToken" -H "Version: {$VERSION}" -T "post.tar.gz" "https://wikipedia.org/api/upload/" >file.json
Python脚本对比
失效脚本(读取Jenkins工作区文件)
import json import os WORKSPACE = os.environ.get('WORKSPACE') json_text = str() with open(f'{WORKSPACE}/file.json', 'r') as f: json_text = f.read() data = json.loads(json_text) post = data['POST'] print (post)
正常脚本(读取仓库内文件)
import json import os json_text = str() with open('repo/marta/file.json', 'r') as f: json_text = f.read() data = json.loads(json_text) post = data['POST'] print (post)
内容的提问来源于stack exchange,提问作者Marta
相关产品推荐
相关产品推荐

