[英]Should I run tests during the docker build?
我有一个这样的 Dockerfile:
FROM python:3.9
WORKDIR /app
RUN apt-get update && apt-get upgrade -y
RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
ENV PATH /root/.local/bin:$PATH
COPY pyproject.toml poetry.lock Makefile ./
COPY src ./src
COPY tests ./tests
RUN poetry install && poetry run pytest && make clean
CMD ["bash"]
如您所见,测试将在构建期间运行。 它可能会稍微减慢构建速度,但会确保我的代码在 Docker 容器中运行。
如果测试在我的本地机器上通过,并不意味着它们也会在 docker 容器中通过。
假设我在我的代码中添加了一个使用 chromedriver 或 ffmpeg 二进制文件的功能,它存在于我的系统中,因此测试将在我的系统中通过。
但是,假设我忘记在 Dockerfile 中安装这些依赖项,那么 docker 构建将失败(因为测试在构建期间运行)
做我想做的事情的标准方法是什么?
我的Dockerfile好用吗? 或者我应该做些不同的事情吗?
在图像构建上运行 pytest 对我来说毫无意义。 但是,您可以做的是在映像完成后运行测试。 在你的管道中,你应该有这样的东西:
如果您使用多个阶段,您可以运行docker build
并避免运行测试,如果您想在之后运行测试,运行docker build --target test
将在之前构建的内容上运行测试。 这种方法在docker 官方文档中有解释。
这样,我们不仅可以避免由于 Docker 缓存机制而运行两次构建,还可以避免将测试代码运送到映像中。
在执行 CI/CD 时,此实现的一个可能用例是在本地开发和在 CI 中运行这两个命令; 并且不要运行 CD 中的测试命令,因为正在部署的代码已经过测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.