Примеры пайплайнов

From Svacer Wiki
Revision as of 18:16, 13 November 2024 by Akuzmin (talk | contribs) (create page and quality-gate example)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Использование quality gate

В этом примере пайплайна из Gitlab-CI запускается сборка и анализ в докер-контейнере, где уже установлен Svace, Svacer и базовые пакеты для сборки (метапакет build-essential).

image: registry.ispras.ru/demo/docker-images/ubuntu-svace-svacer:focal-3.4.240902-9.0.2 

analyze:
  stage: build

  tags:
  - docker
  - linux

  script:
    - apt update 
    - apt install -y git python3 pkg-config mesa-common-dev libgl-dev libglu1-mesa-dev freeglut3-dev libx11-dev libxi-dev libxrandr-dev 
    - git clone --recurse-submodules -j`nproc` https://github.com/ArtifexSoftware/mupdf.git
    - cd mupdf
    - /opt/svace/bin/svace build --init make -j`nproc`
    - /opt/svace/bin/svace analyze
    - /usr/bin/svacer import --svace /opt/svace/bin/svace --project "${CI_PROJECT_NAMESPACE}-${CI_PROJECT_NAME}" --branch $CI_COMMIT_REF_NAME --snapshot "$CI_COMMIT_SHORT_SHA - `date -R`" .
    - /usr/bin/svacer upload --host https://svacer.ispras.ru --quick-stats --quality-gate total:critical:0 --quality-gate-exit-code 1

  allow_failure:
    exit_codes: 
      - 1
  • В начале ставятся специфические зависимости, необходимые для сборки mupdf
  • Клонируется репозиторий с его сабмодулями
  • Запускается сборка с перехватом ее статическим анализатором (svace build)
  • Запускается анализ (svace analyze)
  • После фазы анализа запускается импорт данных анализа в Svacer (svacer import). На этом этапе указывается имя проекта, ветки и снимка, которые будут отображаться в интерфейсе Svacer-сервера после загрузки. Имена берутся из CI-переменных гитлаба, к имени снимка добавляется текущая дата
  • На этапе загрузки (svacer upload) добавляются две опции: quality-gate и quality-gate-exit-code
  • --quality-gate total:critical:0 — quality gate сработает, если статическим анализатором будут найдены предупреждения с severity:critical
  • --quality-gate-exit-code 1 — в случае срабатывания quality gate команда вернет exit code 1
  • Далее в пайплайне указываем, что exit code 1 считается как допустимый failure. Гитлаб в этом случае отобразит статус пайплайна Warning. Если quality gate не сработает (предупреждений с severity:critical не будет найдено), пайплайн завершитcя со статусом Passed

Подробнее об использовании quality-gate смотрите в svacer upload --help:

  --quality-gate value            Specify a quality gate. Format: stat_1:severity_1:N_1,...,stat_k:severity_k:N_k, stat takes values: new, missing, matched, same, total; severity takes the following values: all, critical, major, normal, minor, undefined, <detector name part>; N is a natural number. If the severity of the number N is exceeded, it will out a warning. Also, as a value, you can specify a json or yaml file in which the quality gate is specified.
  --quality-gate-exit-code value  Specify the exit code of the application in the range from 0 to 125, which will be issued when the quality-gate is exceeded. The default is 0.
  --quality-gate-verbose          Specify this flag to obtain additional information about the evaluation results of quality gate. (default: false)