我想防止使用gitlab CI测试规则检入TODO注释(或其他有问题的字符串)。我在这里添加了最后一行:
.job_template: &template_test
image: python:3.6-stretch
tags:
- python
# ...
stages:
- test
test:
<<: *template_test
stage: test
script:
- flake8 *.py
- ! grep TODO *.py
但是当我查看运行器的输出时,它会失败:
$ flake8 *.py
$ grep TODO *.py
ERROR: Job failed: exit code 1
Gitlab似乎吞下了negate the return value of grep外壳中使用的感叹号!
。
答案 0 :(得分:3)
必须引用开头带有感叹号(! grep ...
)的行。但是,即使此('! grep ...'
)在这里也不起作用,返回码也始终为零。我从https://stackoverflow.com/a/31549913/491884获得了解决方案,因为GitLab CI以set -e
启动了外壳程序,所以必须启动子外壳程序。这应该可行并且相当短:
script:
...
- (! grep TODO *.py)
答案 1 :(得分:1)
!
是reserved character in YAML,因此无法正常工作。
但是,在这种情况下,您可以使用if..then
表达式:
- if [ "$(grep TODO *.py)" != "" ]; then exit 1; fi