我应该 运行 在 docker 构建期间进行测试吗?

Should I run tests during the docker build?

我有一个这样的 Docker 文件:

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"]

如您所见,测试将在构建期间 运行。它可能会稍微减慢构建速度,但会确保我的代码 运行s 在 Docker 容器中。

如果测试在我的本地机器中通过,并不意味着它们也会在 docker 容器中通过。

假设我在我的代码中添加了一个使用 chromedriver 或 ffmpeg 二进制文件的功能,该功能存在于我的系统中,因此测试将在我的系统中通过。

但是,假设我忘记在 Docker 文件中安装这些依赖项,那么 docker 构建将失败(因为测试在构建期间 运行ning)

做我想做的事情的标准方法是什么?

我的 Docker 文件好吗?或者我应该做些不同的事情吗?

运行 关于图像构建的 pytest 对我来说毫无意义。但是,您可以做的是 运行 在图像完成后进行测试。在你的管道中你应该有这样的东西:

  1. 在本地测试您的 python 包
  2. 以诗造轮
  3. 使用您的 python 包构建 docker 图像
  4. 运行 您的 docker 图像以测试它是否有效(例如 运行ning pytests)
  5. 将您的测试映像发布到容器注册表