﻿# Отправка результатов анализа на сервер

## Утилита Atlas Scanner

Для отправки результатов анализа на сервер используется утилита Atlas Scanner\. Она распространяется в готовом образе Docker:

```cpp
pull viva64/atlas-scanner
```

Загружается последняя стабильная версия утилиты\. Для загрузки конкретной версии используйте систему тегов Docker:

```cpp
pull viva64/atlas-scanner:8.0
```

Рекомендуется использовать все сервисы PVS\-Studio Atlas одной версии\.

## Быстрый старт

Перед запуском сканнера введите лицензию PVS\-Studio на [сервере](https://pvs-studio.ru/ru/docs/manual/7200/) и подготовьте два параметра, значения которых можно найти в настройках сервера:

* API\-ключ для доступа к серверу;
* ID ветки проекта, куда будут загружены результаты\.

Подробнее об этих настройках можно узнать в документации "[Управление проектами и ветками"](https://pvs-studio.ru/ru/docs/manual/7207/)\.

Для ознакомления с параметрами запуска введите команду:

```cpp
docker run --rm viva64/atlas-scanner --help
```

Минимальная команда для запуска может выглядеть так:

_docker run \-\-rm \-v **"/Users/nickname/Downloads/BotSharp**":"/mnt/project" viva64/atlas\-scanner \-\-reportPaths /mnt/project/**BotSharp\.json** \-\-sourceTreeRoot /mnt/project/ \-\-serverUrl **http://atlas\-server:8080** \-\-apiKey **49931204\-56e0\-4cbf\-b87a\-29c94735cc9e** \-\-branchId **85c6129f\-0097\-466a\-9e48\-466a7b74d75f** \-\-logDir /mnt/project/scanner\_logs_

Для быстрого старта замените выделенные жирным фрагменты на свои\.

Если Atlas Server и Atlas Scanner запускаются на одном компьютере, то результаты анализа необходимо отправить по адресу `http://host.docker.internal:8080`\.

## Аргументы запуска

Используемые аргументы командной строки Docker:

* `run` \(**обязательный**\) — создаёт и запускает новый контейнер на основе указанного образа\.
* `-v` \(**обязательный**\) — монтирует каталог с проектом к контейнеру Docker, чтобы Atlas Scanner в контейнере мог обработать отчёт анализатора и исходные файлы\.
* `--rm` — указывает Docker удалить контейнер после завершения работы\.

Основные аргументы командной строки Atlas Scanner:

* `--version` — выводит информацию о текущей версии сканнера\.
* `--help` — выводит в консоль справку со всеми аргументами командной строки\.
* `--reportPaths` \(**обязательный**\) — пути до отчётов анализаторов в форматах `.plog`, `.json` и `.sarif` \(в разработке\)\. Можно перечислить несколько путей, если в одну ветку проекта нужно загрузить отчёты от разных анализаторов кода\.
* `--sourceTreeRoot` \(**обязательный**\) — путь до каталога с проектом, где расположены файлы с исходным кодом\.
* `--serverUrl` \(**обязательный**\) — адрес сервера, где развёрнут принимающий результаты Atlas Server\.
* `--apiKey` \(**обязательный**\) — ключ авторизации, допускающий Atlas Scanner к подключению\. API\-ключи создаются в настройках Atlas Server сотрудником, имеющим право **Управление проектами**\.
* `--branchId` \(**обязательный**\) — идентификатор ветки в проекте, куда необходимо загрузить результаты анализа\.
* `--gitBlame` — аргумент включает режим сбора информации о коммитерах и её объединения с результатами анализа\.
* `--logDir` — каталог, который содержит различные логи работы Atlas Scanner\. Логи работы анализатора или отчёты анализатора в сохраняемую информацию не входят\.
* `--sourceMask` — маска, по которой файлы исходного кода запаковываются и отправляются на сервер\. Значение по умолчанию: `.c.cpp.hpp.h.cc.cxx.cs.csx.razor.java.ts.js.go`\.
* `--uploadMode` — аргумент задаёт режим работы с файлами исходного кода:
  * `ReportSources` \(по умолчанию\) запаковывает только те файлы исходного кода, на которые указывает отчёт анализатора\. Игнорирует аргумент `sourceMask`\.
  * `MaskSources` — запаковывает все исходные файлы по маске, указанной в аргументе `sourceMask`, а также файлы, на которые указывает отчёт анализатора\.
  * `WithoutSources` — файлы с исходным кодом не отправляются на сервер\.
* `--quietMode` — режим без вывода информации в консоль\. В сочетании с аргументом `logDir` будет сохранять весь вывод в отдельном файле\.

## Коды возврата сканнера

Описание кодов возврата утилиты:

* 0 — успешное завершение работы сканера;
* 1 — внутренняя ошибка во время работы сканера, следует сообщить об этом разработчикам через форму [обратной связи](https://pvs-studio.ru/ru/about-feedback/);
* 2 — запуск сканера с неверным аргументом;
* 3 — ошибка при загрузке отчёта PVS\-Studio в формате `.plog`;
* 4 — ошибка при загрузке отчёта PVS\-Studio в формате `.json`;
* 5 — ошибка при загрузке отчёта PVS\-Studio в формате `.sarif`;
* 6 — ошибка при запаковке отчёта `.pvsmap` перед отправкой;
* 7 — не удалось подключиться к серверу из\-за проблем с сетью;
* 8 — сервер не доступен для приёма отчёта анализатора;
* 9 — проблема с лицензией на сервере;
* 10 — указанная ветка проекта не найдена на сервере;
* 11 — указанная ветка проекта архивирована и не принимает результаты анализа;
* 12 — проблема с загрузкой отчёта `.pvsmap` на сервере\.

## Возможные проблемы и их решение

### Ошибка "The SSL connection could not be established"

Ошибка может возникнуть по разным причинам\. Большинство из них будут связаны с администрированием сервера, а не программным обеспечением\.

Если в вашей компании для внутренних сервисов используется самоподписанный \(самозаверенный\) сертификат, его необходимо передать в контейнер с Atlas Scanner с помощью параметра `-v`:

```cpp
-v "/path/to/rootCA.crt":"/etc/ssl/certs/my-server-cert.crt:ro"
```

### Ошибка "Connection refused" на macOS

Если ваш Atlas Server развёрнут в локальной сети, то могут возникнуть проблемы при загрузке результатов анализа на macOS\. В одной из версий Docker Desktop появился регрессионный баг \(подтверждён официально\), который ломает доступ из контейнера к локальным IP\.

На момент весны 2026 он продолжает воспроизводиться в macOS Tahoe\. Рекомендуем рассмотреть альтернативы Docker Desktop, например [OrbStack](https://orbstack.dev/)\.

После установки OrbStack проверьте, какой движок Docker является активным:

```cpp
docker context ls
```

Если это не OrbStack, то поставьте рядом с ним звёздочку с помощью команды:

```cpp
docker context use orbstack
```