python - devpi:手动上传 toxresult.json
问题描述
我目前有一个 Jenkins 管道,它使用tox构建和测试我的 python 包。如果所有单元测试都通过了,它将被上传到我本地的 devpi 索引。
使用devpi test <mypackage>
我可以将测试结果附加到索引上的发布文件中。但这将再次下载已经构建的包,重复tox.ini
文件中定义的所有已经通过的测试套件,然后才以toxresult.json
.
有没有办法直接上传toxresult.json
发布文件?根据快速入门和测试命令的文档,似乎没有命令行选项,上传命令中也没有。
当然,我可以更改我的 Jenkins 管道以在上传之前跳过测试,然后使用 devpi 构建、上传和测试包。如果devpi test
命令失败,我可以从索引中删除包。但我宁愿首先不上传测试失败的包。
解决方案
匿名上传
如果您允许匿名用户上传测试结果(这是默认设置 IIRC),则相对容易。向上传的 dist 的 URL发出POST
请求,将tox
结果作为 JSON 有效负载传递。例子:
$ curl -i \
-H "content-type: application/json" \
-X POST \
--data-binary "@/tmp/toxreport.json" \
http://my-server/myuser/myindex/+f/19b/d3544d03b1716/mypkg-1.0.tar.gz
成功后,您应该得到类似于
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Content-Length: 143
Content-Type: application/json
Date: Wed, 08 Jan 2020 15:48:32 GMT
Server: waitress
X-Devpi-Api-Version: 2
X-Devpi-Master-Uuid: d800735d04a14c2d9bde920149cb8dbc
X-Devpi-Serial: 42
X-Devpi-Server-Version: 5.3.1
X-Devpi-Uuid: d800735d04a14c2d9bde920149cb8dbc
{
"result": "myuser/myindex/+f/19b/d3544d03b1716/mypkg-1.0.tar.gz.toxresult-20200108154832-0",
"type": "toxresultpath"
}
File
您可以在项目页面的文件表的列中找到目标 URL 。或者查询 JSON API 并过滤结果,例如
$ devpi getjson /myuser/myindex/mypkg | jq -r '[ .result[] | .["+links"][] | .href ]'
经过身份验证的上传
devpi
使用基本身份验证,因此只需在标头中传递 base64 编码的凭据Authorization: Basic
。例如,curl
再次:
$ curl -i \
--user myuser:mypass \
-H "content-type: application/json" \
-X POST \
--data-binary "@/tmp/toxreport.json" \
http://my-server/myuser/myindex/+f/19b/d3544d03b1716/mypkg-1.0.tar.gz
如果您需要有关测试上传身份验证的详细信息,请在此处查看我的其他答案。
推荐阅读
- javascript - 获取输入事件的先前值
- certificate - 将 CodeFluent.Runtime.Utilities.Authenticode.FindSuitableCertificate 转换为 C#
- sql - SQL Server,如何获得年轻用户?
- c++ - 使用迭代方法计算矩阵的行列式
- matlab - 使用 Matlab 函数 eps2pdf 的问题
- python - 如何检查嵌套列表中的组合?
- javascript - 是否可以在不引用流的情况下取消管道对象
- c# - C# 中的 Delphi 单元相当于什么?
- zerobrane - 难以让 ZeroBrane 突出显示代码、自动完成等
- c# - 防止表格离开屏幕