Pipelines: Difference between revisions
(add basic pipeline example) |
mNo edit summary |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 17: | Line 17: | ||
=== Использование quality gate === | === Использование quality gate === | ||
{{Note|text=В версии 9.х.х был баг в quality-gate: он всегда возвращал 0, даже если задан другой exit code. В версии 10.0.0 это исправили.}} | |||
В этом примере пайплайна из Gitlab-CI после этапов сборки и анализа запускается импорт результатов с указанием имен проекта, ветки и снимка, взятых из CI-переменных, а при загрузке используется quality-gate, который меняет статус пайплайна в зависимости от результатов статического анализа. | В этом примере пайплайна из Gitlab-CI после этапов сборки и анализа запускается импорт результатов с указанием имен проекта, ветки и снимка, взятых из CI-переменных, а при загрузке используется quality-gate, который меняет статус пайплайна в зависимости от результатов статического анализа. | ||
Line 49: | Line 52: | ||
* Запускается анализ (svace analyze) | * Запускается анализ (svace analyze) | ||
* После фазы анализа запускается импорт данных анализа в Svacer (svacer import). На этом этапе указывается имя проекта, ветки и снимка, которые будут отображаться в интерфейсе Svacer-сервера после загрузки. Имена берутся из CI-переменных гитлаба, к имени снимка добавляется текущая дата | * После фазы анализа запускается импорт данных анализа в Svacer (svacer import). На этом этапе указывается имя проекта, ветки и снимка, которые будут отображаться в интерфейсе Svacer-сервера после загрузки. Имена берутся из CI-переменных гитлаба, к имени снимка добавляется текущая дата | ||
* На этапе загрузки (svacer upload) добавляются две опции: '''quality-gate''' и '''quality-gate-exit-code''' | * На этапе загрузки (svacer upload) добавляются две опции: '''quality-gate''' и '''quality-gate-exit-code''' ([[Help:Import_from_Svace#Использование_quality_gate|документация по quality gate]]) | ||
:* <code>--quality-gate total:critical:0</code> — quality gate сработает, если статическим анализатором будут найдены предупреждения с severity:critical | :* <code>--quality-gate total:critical:0</code> — quality gate сработает, если статическим анализатором будут найдены предупреждения с severity:critical | ||
:* <code>--quality-gate-exit-code 1</code> — в случае срабатывания quality gate команда вернет exit code 1 | :* <code>--quality-gate-exit-code 1</code> — в случае срабатывания quality gate команда вернет exit code 1 | ||
Line 55: | Line 58: | ||
[[File:Pipeline-warning.png|frame|none]] | [[File:Pipeline-warning.png|frame|none]] | ||
Latest revision as of 14:48, 17 June 2025
Статический анализ и загрузка результатов
Самый базовый пример пайплайна 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
В версии 9.х.х был баг в quality-gate: он всегда возвращал 0, даже если задан другой exit code. В версии 10.0.0 это исправили.
В этом примере пайплайна из 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)
--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
