Как обнаружить предупреждения компилятора в gitlab CI - PullRequest
2 голосов
/ 10 января 2020

На этапах настройки сборок 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. ищу.

1 Ответ

2 голосов
/ 13 января 2020

Похоже, что решение этой проблемы (например, см. Вопрос «Добавить новое состояние элемента конфигурации: has-warnings» https://gitlab.com/gitlab-org/gitlab-runner/issues/1224) состояло в том, чтобы ввести параметр allow_failure так что одним заданием может быть сама компиляция, которой нельзя разрешить сбой (если это произойдет, то конвейер завершится неудачно), а другим заданием может быть обнаружение таких предупреждений, которое равно допускается сбой (если он найден, конвейер не будет сбой).

Также была запрошена возможность определения регулярного выражения предупреждения в .gitlab-ci.yml , но это не так. существует еще.

...