На этапах настройки сборок CI на нашем сервере gitlab я не могу найти информацию о том, как настроить обнаружение предупреждений компилятора. Пример вывода сборки:
[100%] Building CXX object somefile.cpp.o
/home/gitlab-runner/builds/XXXXXXX/0/group/project/src/somefile.cpp:14:2: warning: #warning ("This is a warning to test gitlab") [-Wcpp]
#warning("This is a warning to test gitlab")
^
Однако результат сборки будет success
вместо warning
или что-то подобное. В идеале результаты также должны быть видны в запросе на слияние функции (и блокировать слияние, если это возможно).
Я не могу себе представить, что я единственный, кто пытается достичь этого, поэтому я, вероятно, ищу в неправильном направлении. «Лучшее» решение, которое я нашел, - это как-то вручную разобрать выходные данные сборки и сгенерировать отчет JUnit.
Как бы я go сделал это, не допустив сбоя задания сборки, так как мне бы хотелось, чтобы оно было потерпеть неудачу при возникновении ошибок компилятора.
Обновление
Для тех, кто наткнулся на этот вопрос позже, и вместо лучшей практики, вот как я решил это:
stages:
- build
- check-warnings
shellinspector:
stage: build
script:
- cmake -Bcmake-build -S.
- make -C cmake-build > >(tee make.output) 2> >(tee make.error)
artifacts:
paths:
- make.output
- make.error
expire_in: 1 week
analyse build:
stage: check-warnings
script:
- "if [[ $(cat make.error | grep warning -i) ]]; then cat make.error; exit 1; fi"
allow_failure: true
На первом этапе сохраняются ошибки вывода сборки в make.error
, затем на следующем этапе запрашивается этот файл для предупреждений и происходит сбой на этом этапе с allow_failure: true
для создания состояния конвейера passed with warning
. ищу.