Примеры пайплайнов
Статический анализ и загрузка результатов
Самый базовый пример пайплайна 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)