[英]Running pre-commit hooks (e.g. pylint) when developing with docker
预提交挂钩在单独的虚拟环境(或 Docker 容器)中运行。 然而,我们的代码在 Docker 上运行,我们也在使用 Docker 进行开发。
到目前为止,我们不必在主机系统上安装任何依赖项,但是在运行mypy
、 isort
和pylint
它们会遇到问题,因为它们无法访问已安装的依赖项。
我们的第一个想法是在主机系统的虚拟环境中安装依赖项,但这似乎也是一个笨拙的解决方法。
有没有一种很好的方法来运行具有对容器的完全访问权限的预提交?
我们有同样的想法,这就是我们在团队中的最终结果:
docker
仅包含图像pre-commit
本身(含隐python
, pip
等)。 注意:这里真的需要docker
镜像,因为我们确实使用了基于 Docker 的钩子。clang-format
,所以最终的clang-format
Docker 镜像只包含clang-format
二进制文件。 这就是mypy
可能会去的地方,因为它有很多额外的非 Python 依赖项。注意:在“docker in docker”模式下工作时预提交有点糟糕,所以我们不得不应用一个解决方法,参见https://github.com/pre-commit/pre-commit/issues/1387
最后,我们的.pre-commit-config.yaml
文件包含如下条目:
# Normal, "simple" hooks which can be just installed as is
- repo: ...pre-commit-hooks/pre-commit-hooks
rev: v3.3.0
hooks:
- ...
# Docker hooks
- repo: local
hooks:
- id: docker-clang-format
name: Docker Clang Format
language: docker_image
types:
- c++
entry: <our-registry.com>/clang_format:11
# Local workarounds for devs who cannot or don't want to use Docker, but still would like to benefit from running pre-commit locally
- repo: <...>/pre-commit-clang-format
rev: ...
hooks:
- id: clang-format
stages: [manual] # Mind this line, only for manual run
types:
- c++
为代码风格检查创建一个特殊的容器怎么样?
它应该安装了所有需要的 linter 和一个用于检查代码目录的 bash 文件。
你的钩子命令看起来像docker run -v [mount code dir to container in RO mode] codestyle_check_container
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.