Travis CI部署未触发:Poetry发布到TestPyPI无输出问题排查
1. 修复TestPyPI仓库协议问题
当前配置里的仓库地址用了HTTP,TestPyPI已强制HTTPS访问,这会导致请求被拦截无输出。修改before_deploy里的仓库配置:
poetry config repositories.testpypi https://test.pypi.org/legacy/
2. 验证环境变量是否正常加载
在before_deploy中添加token存在性验证(仅输出前缀,避免泄露):
- echo "Token prefix: ${MYPYPI_API_TOKEN:0:5}..."
如果输出为空,说明Travis项目设置里的环境变量MYPYPI_API_TOKEN未正确配置,检查变量名拼写、是否在Travis项目的"Settings"->"Environment Variables"中添加,且未勾选"Allow this variable to be used in pull requests"(推送main分支不需要此选项)。
3. 重构部署逻辑,放弃Travis Deploy Provider
原配置用script: skip跳过脚本阶段,再通过deploy provider执行发布,这种方式容易触发Travis阶段逻辑异常。直接把发布逻辑移到job的script阶段:
修改Publish阶段的job配置:
- stage: Publish name: deploy_Pypi before_script: - poetry config repositories.testpypi https://test.pypi.org/legacy/ - poetry config pypi-token.testpypi $MYPYPI_API_TOKEN - poetry build script: - echo Deploying to TestPyPI... - poetry publish -vvv --repository testpypi after_script: - echo "Deploy completed" if: branch = main
这种方式直接在脚本阶段执行发布,输出会完整显示在Travis日志里,便于排查问题。
4. 锁定Poetry版本,避免兼容性问题
pip install poetry默认安装最新版,可能和Travis的jammy环境存在兼容问题,指定一个稳定版本:
在before_install中修改为:
pip install poetry==1.8.3
5. 确认分支触发条件
确保推送的代码确实在main分支,且Travis项目设置中未禁用main分支的构建。如果是通过标签发布,可将if条件改为tag IS present。
本地模拟Travis环境排查
用Docker模拟Travis的jammy环境,复现构建发布流程,看是否有报错:
docker run -it --rm ubuntu:jammy # 容器内执行: apt update && apt install -y python3.10 python3-pip pip install poetry==1.8.3 git clone <你的项目仓库> cd <项目目录> poetry config repositories.testpypi https://test.pypi.org/legacy/ poetry config pypi-token.testpypi <你的TestPyPI token> poetry install poetry build poetry publish -vvv --repository testpypi
如果本地模拟也有问题,说明是项目配置或Poetry的问题;如果正常,再回到Travis检查环境变量和分支配置。
内容的提问来源于stack exchange,提问作者Stefano Bar

