Travis-CI:不要因为 linter 警告而导致构建失败

Travis-CI: Do not fail build because of linter warnings

我有一个旧的 python 项目,我正在尝试使用 flake8 逐步清理该项目(以警告 PEP8 问题)。我使用 Travis 进行持续集成,并希望我的构建在任何单元测试失败时失败。但是,我不希望我的构建仅仅因为 flake8 产生了警告而失败(例如,关于像尾随白色 space 这样的小事)。

如何配置 Travis 以输出 flake8 警告(以便我可以在有时间的时候解决它们)而不导致构建失败?

我的.travis.yml如下:

language: python
python:
  - "3.6"

install:
  - pip install -r requirements.txt
  - pip install flake8

script:
  - python -m unittest discover -v
  - flake8 .

Flake8 警告示例:

./meta-db/file_system.py:103:80: E501 line too long (108 > 79 characters) 
./meta-db/file_system.py:106:68: W291 trailing whitespace

向 flake8 添加 --exit-zero 标志允许显示 lint warnings/errors 而不会导致 Travis 构建失败。

script:
  - python -m unittest discover -v
  - flake8 . --exit-zero # Exit with status code "0" even if there are errors.

您可以让 flake8 只检查最近的提交,这样您就可以验证最近的更改是否合规,而不是整个项目。一旦你有信心,例如,

script:
    - python -m unittest discover -v
    - git diff -U0 $TRAVIS_COMMIT_RANGE | flake8 --diff
    - flake8 . --exit-zero

一旦最后一条命令停止打印错误,您就可以 trim --exit-zero