我目前有一个Jenkins管道,它使用tox构建和测试我的python包。如果所有单元测试都通过,它将被上传到我的本地devpi索引。
使用devpi test <mypackage>,我可以将测试结果附加到索引上的发布文件。但是这将再次下载已经构建的包,重复在tox.ini文件中定义的所有已经通过的测试套件,然后才以toxresult.json的形式上传结果。
有没有办法直接把toxresult.json和发布文件一起上传?根据quickstart和documentation of test command的说法,似乎没有命令行选项,在upload命令中也没有。
当然,我可以更改我的Jenkins管道,在上传之前跳过测试,然后使用devpi构建、上传和测试包。如果devpi test命令失败,我可以从索引中删除包。但是我不愿意上传一个测试失败的包。
发布于 2020-01-09 00:17:17
匿名上传
如果您允许匿名用户上传测试结果(这是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使用基本身份验证,因此只需在Authorization: Basic报头中传递base64编码的凭据。再次使用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如果您需要有关测试上传身份验证的详细信息,请查看我的其他答案here。
https://stackoverflow.com/questions/59518800
复制相似问题