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

From Svacer Wiki
Revision as of 17:50, 14 November 2024 by Akuzmin (talk | contribs) (add basic pipeline example)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Статический анализ и загрузка результатов

Самый базовый пример пайплайна Gitlab-CI. Сборка и анализ запускаются в докер-контейнере, где уже установлен Svace, Svacer и базовые пакеты для сборки (метапакет build-essential). Репозиторий в пайплайне не клонируется, поскольку файл пайплайна .gitlab-ci.yml уже находится в анализируемом репозитории.

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

analyze:
  stage: build

  script:
    - ./configure
    - /opt/svace/bin/svace build --init make
    - /opt/svace/bin/svace analyze
    - /usr/bin/svacer import --svace /opt/svace/bin/svace --project bash 
    - /usr/bin/svacer upload --host https://svacer.ispras.ru

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

В этом примере пайплайна из Gitlab-CI после этапов сборки и анализа запускается импорт результатов с указанием имен проекта, ветки и снимка, взятых из CI-переменных, а при загрузке используется quality-gate, который меняет статус пайплайна в зависимости от результатов статического анализа.

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)