Перейти к содержанию

Автоматически проверять безопасность компонентов в сборке и формировать отчет

Контекст

Если композиционный анализ запускается только вручную, уязвимости и нарушения политик легко заметить слишком поздно, уже после неудачной сборки или выпуска. Опытные команды встраивают такую проверку прямо в сборочный конвейер, чтобы каждый запуск сразу показывал состав компонентов, найденные уязвимости и срабатывания политик.

Для этого используется консольный агент Johnny: он анализирует зависимости, сохраняет результаты в CodeScoring и сохраняет SBOM и отчеты.

В сценарии ниже для примера используется GitLab CI, но тот же принцип подходит и для других конвейеров, где агент Johnny можно запускать как часть сборки.

Что получится

После прохождения сценария в .gitlab-ci.yml появится отдельное задание sca, которое:

  • запускает агент Johnny на содержимом репозитория;
  • сохраняет результаты в проект CodeScoring;
  • формирует bom.json и report.sarif как артефакты сборки.

Требования

Перед началом убедитесь, что есть:

  • GitLab-репозиторий с настроенным GitLab CI;
  • переменные GitLab CI JOHNNY_API_URL и JOHNNY_API_TOKEN;
  • лицензия CodeScoring, в которой включен модуль SCA;
  • доступ к CodeScoring, в котором можно автоматически создать проект для результатов агента Johnny через --create-project или использовать существующий;
  • понимание, какие политики должны применяться к запуску агента на этапе build.

Шаги

Шаг 1. Подготовьте бинарный файл агента в среде сборки

Перед добавлением задания в конвейер важно убедиться, что сам агент доступен в той среде, где будет выполняться сборка.

  1. Откройте страницу [platform-url]/download/ в своей инсталляции CodeScoring.
  2. При необходимости проверьте актуальную версию агента по адресу [platform-url]/download/johnny_version.
  3. Скачайте подходящий исполняемый файл агента в среду сборки, например в /usr/local/bin/johnny.
  4. Разрешите исполнение файла:
chmod +x /usr/local/bin/johnny

Если требуется более подробный пример именно для GitLab CI, его можно взять из руководства по добавлению агента в GitLab CI.

После этого в конвейере можно вызывать johnny как обычную исполняемую команду.

Шаг 2. Добавьте отдельное задание sca в .gitlab-ci.yml

Главная задача этого шага — вынести проверку зависимостей в самостоятельное задание и сразу определить, какие файлы останутся после выполнения сборки.

Пример задания в .gitlab-ci.yml

stages:
  - test

sca:
  stage: test

  script:
    - >
      johnny scan dir .
      --api_token $JOHNNY_API_TOKEN
      --api_url $JOHNNY_API_URL
      --project "billing-service-cli"
      --save-results
      --create-project
      --stage build
      --localization ru
      --format "coloredtable,sarif>>report.sarif"
      --ignore .git

  artifacts:
    paths:
      - bom.json
      - report.sarif
    when: always
    expire_in: 1 week

Что важно в этом задании:

  • scan dir . запускает анализ директории репозитория;
  • --project, --save-results и --create-project сохраняют результаты в CodeScoring;
  • --stage build применяет политики, относящиеся к запуску через агент Johnny;
  • --format "coloredtable,sarif>>report.sarif" оставляет консольный вывод и одновременно пишет отчет в формате sarif;
  • bom.json формируется агентом автоматически и сохраняется как артефакт вместе с report.sarif.
  • полный список флагов и режимов запуска собран в руководстве по запуску агента Johnny.

После этого в конвейере появляется отдельное задание, которое не только запускает анализ, но и оставляет файлы, пригодные для отчётности и дальнейшей автоматизации.

Шаг 3. Запустите конвейер с новым заданием

Теперь важно добиться первого реального прогона, чтобы проверить сразу три вещи: команда выполняется, артефакты создаются, а результаты отправляются в платформу.

  1. Сохраните изменения в .gitlab-ci.yml.
  2. Зафиксируйте их в Git и отправьте ветку в GitLab.
  3. Дождитесь запуска задания sca.

Как трактовать код возврата агента

Код возврата 1 означает, что агент Johnny завершил анализ и нашёл проблемы, соответствующие политикам безопасности. Это не аварийное завершение. Подробно коды возврата и форматы отчетов разобраны в руководстве по запуску агента Johnny.

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

Шаг 4. Посмотрите, как выглядит типичный запуск агента Johnny

Ниже — интерактивное демо с примером задания и типичным выводом агента.

После такого запуска в сборке уже остаются SBOM и машинно-читаемый отчет в формате sarif.

Шаг 5. Проверьте, что результаты действительно пригодны для работы дальше

Автоматическая проверка имеет смысл только тогда, когда ее результат можно сразу использовать в сборке, платформе и дальнейшей обработке.

Проверьте, что после выполнения задания:

  1. В артефактах GitLab доступны файлы:
    • bom.json;
    • report.sarif.
  2. В CodeScoring появился проект billing-service-cli, если он не существовал раньше.
  3. В этом проекте сохранены результаты последнего запуска.

Зачем нужны оба файла

bom.json удобно использовать как SBOM-артефакт сборки, а report.sarif — как машинно-читаемый отчет для CI/CD-инструментов, систем безопасной разработки и последующей автоматизации проверок.

На этом этапе сборка уже не просто выполняет проверку, а оставляет после себя понятный набор данных для анализа и отчетности.

Результат

Сценарий можно считать завершенным, если:

  • в .gitlab-ci.yml появилось отдельное задание sca с запуском агента Johnny;
  • задание формирует bom.json и report.sarif как артефакты;
  • агент Johnny сохраняет результаты в проект CodeScoring через --save-results;
  • команда понимает, что код возврата 1 означает найденные нарушения политик, а не сбой агента.

После этого безопасность компонентов проверяется автоматически на этапе сборки, а отчеты остаются доступны и в CI, и в платформе.

Что дальше

Страница была полезна?