jenkinsfile里的执行http异常的解决方法

环境:
jenkins2的multibranch任务模式。

在jenkins的部署阶段,需要使用http来发送post给部署系统,发现出现:
“OSError: [Errno 13] Permission denied: ‘/.httpie’”的错误。
在测试机里执行相同的镜像,运行相同的指令,是ok的,那为什么出错呢?

原因在于测试机进去docker里面是root用户,jenkinsfile里的docker里面其实是jenkins用户(通过id指令可以发现id是1001),普通用户自然会存在权限的问题。。。

查看httpie的源码发现,这是http分析配置文件路径导致的。jenkins用户尝试在根目录下创建.httpie目录,当然失败。

解决方法有两个:
1. 最简单。jenkinsfile的inside里加入-u root,docker.image(xxx).inside(“-u root”),这样使用的是root账号而不是默认的jenkins账户
2. 自己在http的指令之前通过chmod a+w(dockerfile将某个路径chmod a+w,然后运行http之前cd到这个路径 sh “cd xxx && http yyyy),另外jenkins用户在自己的home目录/home/jenkins居然不可写,非常奇葩。。。

这个问题解决后,还有一个问题出现:
“http: error: Request body (from stdin or a file) and request data (key=value) cannot be mixed”
原因是jenkins对docker容器进行了一些stdin的操作,导致http会从stdin中读取一些你意想不到的数据。
最简单的解决方法:
http –ignore-stdin … 加入 –ignore-stdin 参数 即可忽略jenkins的stdin对http的影响。

可以参考官方:
https://httpie.org/doc#best-practices

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值