GitLab CI/CD 确实能自动构建 Python 环境,但能不能顺利跑起来,关键看 .gitlab-ci.yml 里有没有把依赖隔离、缓存复用、虚拟环境路径陷阱这些事安排明白。很多新手在本地跑得欢,一到 CI 就翻车,问题大多出在这几个地方。

为什么 pip install -r requirements.txt 在 CI 里总翻车?

本地能跑不代表 CI 就能跑——CI 跑在干净的 Docker 镜像里,既没有全局 venv,也没有本机习惯的 ~/.cache/pip。常见的报错,比如 ModuleNotFoundError: No module named 'setuptools' 或者 Permission denied,说到底,要么是没搞用户级安装,要么是压根没激活虚拟环境。

怎么让 pip 缓存不至于每次都“从零开始”?

GitLab CI 的默认行为是每次作业都开一个全新的容器,~/.cache/pip 这个目录根本不会保留。如果不配置缓存,一个中等规模的项目,光装依赖就得花掉 2 到 5 分钟,这谁受得了。

cache:
  key: "$CI_COMMIT_REF_SLUG"
  paths:
    - ~/.cache/pip

before_scriptscript 到底该怎么分工?

很多人把 before_script 当成一个“命令垃圾桶”,什么玩意儿都往里塞。这会导致命令执行顺序错乱,甚至权限报错。分工必须明确:

测试都过了,为什么部署时还是 import 失败?

这是一个最容易忽视的陷阱。流水线里 pytest 跑得欢,不代表你的包已经正儿八经地安装成一个可导入的模块了。很多项目图省事,直接 python test/test_main.py,完全绕过了包的安装流程。结果本地开发没问题,但 CI 构建出来的 wheel 文件里,要么缺了 __init__.py,要么 setup.py 的配置有硬伤。

如何通过GitLab CI/CD自动构建Python环境_编写yml流水线脚本

说到底,真正卡住人的从来不是什么高深的语法,而是 venv 激活的 shell 生命周期、缓存路径的绝对性,以及“本地能跑”和“CI 可重现”之间那层薄薄的信任差。把这些细节抠明白,流水线才能跑得又快又稳。

本文转载于:https://www.php.cn/faq/2333110.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。