在 Gitlab CI 中使用 cypress 和 django
Posted
技术标签:
【中文标题】在 Gitlab CI 中使用 cypress 和 django【英文标题】:Using cypress with django in Gitlab CI 【发布时间】:2019-07-08 17:01:47 【问题描述】:我正在使用 Django 开发应用程序,并使用 Cypress 进行前端测试。该设置在本地工作,但我想在 gitlab-ci 上设置测试。
我已经设法让 Gitlab 运行 Cypress 测试(而应用程序在生产服务器上运行)。我想要实现(并且我正在努力实现)是让 Gitlab CI 运行 Django 应用程序(甚至可能使用 nginx/gunicorn,模仿生产环境;但嵌入式开发服务器也足够了)。
有可能吗?一次性运行服务器并让 Cypress 运行? 我已经看到了一些在 Gitlab-CI 上为 nodejs 应用程序使用 docker-compose 的示例 - 但我想避免它,因为正确设置它们(以便它使用缓存等)似乎是超级麻烦的任务。
【问题讨论】:
【参考方案1】:我建议在纯 bash 中进行。通过&
运算符可以并行运行2个任务。
python manage.py runserver & npx cypress run
将运行 django 和 cypress,最后一个 (cypress) 的结果将是命令的最终结果。
如果您的后端需要一些时间来运行,我建议您在一段时间(例如 5 秒)后运行 cypress,python manage.py runserver & (sleep 5 && npx cypress run)
如果你想杀死后端进程,你可以通过python manage.py runserver & echo $! > backend.pid & npx cypress run
将这个进程的pid
保存到文件中,然后运行kill $(cat backend.pid)
命令来杀死这个文件中保存的id的进程
【讨论】:
在 cypress 退出后使用 pidfile 和 kill 的技巧似乎是最合适的。还有一个问题——使用哪个 docker 基础镜像? Python 应该基于python:3
,而 cypress 应该基于cypress/base:10
;使用cypress/base:10
并在里面安装python3 就足够了吗?
在我看来,使用 cypress 和 python3 为 ci 目的创建 docker 容器不会有任何问题。以上是关于在 Gitlab CI 中使用 cypress 和 django的主要内容,如果未能解决你的问题,请参考以下文章
赛普拉斯/GitLab CI/CD 集成 - 赛普拉斯不会在无头模式下启动
如何使用多个 docker 设置 Gitlab CI E2E 测试
cypress ci缺少libgtk-x11-2.0.so.0
用于 Github Actions 和 AWS 的 nextJS、MongoDB 和 Cypress 的 CI/CD [关闭]