Проекты / Maven check versions

Maven check versions

Это python пакет, предназначенный для анализа Maven pom файлов. Он проверяет версии зависимостей в проекте и определяет последние доступные версии в репозиториях и особенно полезен в средах CI/CD, где важно поддерживать согласованность и актуальность зависимостей.

Подробнее на Github

Возможности

  • Анализ зависимостей: Парсит файлы POM Maven для анализа зависимостей и плагинов.
  • Проверка версий: Определяет устаревшие зависимости и сверяет версии с настраиваемыми порогами.
  • Поиск артефактов: Находит конкретные артефакты в формате groupId:artifactId:version.
  • Поддержка репозиториев: Интеграция с HTTP-репозиториями Maven, включая REST-сервисы.
  • Обработка модулей: Обрабатывает вложенные модули в проектах Maven.
  • Кэширование: Кэширует результаты для ускорения повторных проверок, поддерживает разные бэкенды кэша.
  • Логирование: Предоставляет настраиваемое логирование для детального анализа.
  • Интерфейс командной строки: Легко интегрируется в конвейеры CI/CD.
  • Проверка на уязвимости: Проверяет зависимости на известные уязвимости с помощью OSS Index.

Установка

Требования: Python 3.10 или выше.

Установите пакет через pip:

1
pip install maven_check_versions

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

  • Анализ конкретного POM-файла:
1
maven_check_versions --pom_file path/to/pom.xml
  • Поиск конкретного артефакта:
1
maven_check_versions --find_artifact com.example:my-lib:1.0
  • Включение режима CI (без подтверждений):
1
maven_check_versions --ci_mode

Docker-образы

Загрузка из GitHub:

Базовый образ:

1
docker pull ghcr.io/alexundros/maven-check-versions

Образ на основе PyPy:

1
docker pull ghcr.io/alexundros/maven-check-versions:pypy

Загрузка из DockerHub:

Базовый образ:

1
docker pull alexundros/maven-check-versions

Образ на основе PyPy:

1
docker pull alexundros/maven-check-versions:pypy

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

  • Анализ POM-файла:
1
docker run --rm -v 'path/to/pom.xml:/app/pom.xml' alexundros/maven_check_versions -pf /app/pom.xml
  • Поиск артефакта:
1
docker run --rm alexundros/maven_check_versions -fa com.example:my-lib:1.0
  • Режим CI без подтверждений:
1
docker run --rm alexundros/maven_check_versions -ci

Аргументы командной строки

Общие параметры

ПараметрКраткоОписаниеПример
--ci_mode-ciВключает режим CI (без подтверждений).--ci_mode
--pom_file-pfУказывает путь к обрабатываемому POM-файлу.--pom_file path/to/pom.xml
--find_artifact-faПоиск конкретного артефакта. Формат: groupId:artifactId:version.--find_artifact com.example:lib:1.0
--config_file-cfgУказывает файл конфигурации для скрипта.--config_file config.yml
--log_level-llУровень логирования.--log_level debug

Управление кэшем

ПараметрКраткоОписаниеПример
--cache_off-coОтключает кэш для принудительной свежей проверки зависимостей.--cache_off
--cache_file-cfУказывает путь к файлу кэша (только для JSON-бэкенда).--cache_file cache.json
--cache_time-ctВремя жизни кэша в секундах.--cache_time 1800
--cache_backend-cbБэкенд кэша: json, redis, tarantool, memcached.--cache_backend redis

Redis кэш

ПараметрКраткоОписаниеПример
--redis_host-rshХост Redis (по умолчанию: localhost).--redis_host redis
--redis_port-rspПорт Redis (по умолчанию: 6379).--redis_port 6379
--redis_key-rskКлюч в Redis (по умолчанию: maven_check_versions_cache).--redis_key mycache
--redis_user-rsuПользователь Redis (необязательно).--redis_user user
--redis_password-rsupПароль Redis (необязательно).--redis_password pass

Tarantool кэш

ПараметрКраткоОписаниеПример
--tarantool_host-tlhХост Tarantool (по умолчанию: localhost).--tarantool_host tarantool
--tarantool_port-tlpПорт Tarantool (по умолчанию: 3301).--tarantool_port 3301
--tarantool_space-tlsПространство Tarantool (по умолчанию: maven_check_versions_cache).--tarantool_space myspace
--tarantool_user-tluПользователь Tarantool (необязательно).--tarantool_user user
--tarantool_password-tlupПароль Tarantool (необязательно).--tarantool_password pass

Memcached кэш

ПараметрКраткоОписаниеПример
--memcached_host-mchХост Memcached (по умолчанию: localhost).--memcached_host memcached
--memcached_port-mcpПорт Memcached (по умолчанию: 11211).--memcached_port 11211
--memcached_key-mckКлюч в Memcached (по умолчанию: maven_check_versions_cache).--memcached_key mycache

Параметры логирования

ПараметрКраткоОписаниеПример
--logfile_off-lfoОтключает логирование в файл. Логи выводятся только в консоль.--logfile_off
--log_file-lfУказывает путь к файлу логов.--log_file my_log.log

Обработка ошибок и валидация

ПараметрКраткоОписаниеПример
--fail_mode-fmВключает режим “отказа”: скрипт завершится при превышении порога версий.--fail_mode
--fail_major-mjvПорог по основной версии для отказа.--fail_major 1
--fail_minor-mnvПорог по младшей версии для отказа.--fail_minor 2

Поиск и обработка зависимостей

ПараметрКраткоОписаниеПример
--search_plugins-spВключает поиск плагинов Maven в процессе анализа зависимостей.--search_plugins
--process_modules-smОбрабатывает модули, указанные в POM-файле.--process_modules
--show_skip-skВыводит пропущенные зависимости.--show_skip
--show_search-ssЛогирует действия поиска зависимостей.--show_search
--empty_version-evРазрешает обработку зависимостей без указанной версии.--empty_version
--show_invalid-siЛогирует информацию о некорректных зависимостях.--show_invalid

Параметры производительности

ПараметрКраткоОписаниеПример
--threading-thВключает многопоточность для параллельной обработки зависимостей.--threading
--max_threads-mtМаксимальное число потоков при включенной многопоточности.--max_threads 8

Аутентификация

ПараметрКраткоОписаниеПример
--user-unИмя пользователя для базовой аутентификации при доступе к репозиториям.--user my_username
--password-upПароль для базовой аутентификации при доступе к репозиториям.--password my_password

Конфигурация

Поведение инструмента можно настроить через файл конфигурации maven_check_versions.yml. Доступные настройки:

  • Проверка SSL: Включение или отключение проверки SSL при HTTP-запросах.
  • Настройки кэша: Управление временем жизни и поведением кэша.
  • Настройки репозиториев: Задание базовых URL, аутентификации и путей для репозиториев.
  • Настройки логирования: Уровни и пути для логов.
  • Проверка уязвимостей: Настройка проверки зависимостей на известные уязвимости.

Настройки кэша

Инструмент поддерживает несколько бэкендов кэша:

  • JSON (по умолчанию): локальный JSON-файл.
  • Redis: сервер Redis.
  • Tarantool: сервер Tarantool.
  • Memcached: сервер Memcached.

Настройки проверки уязвимостей

Для включения проверки уязвимостей установите oss_index_enabled: true в разделе vulnerability конфигурационного файла. Инструмент использует сервис OSS Index для обнаружения известных уязвимостей. Понадобятся имя пользователя и токен API, которые можно получить после регистрации на https://ossindex.sonatype.org/.

Пример конфигурации:

  1. Проверять все зависимости через OSS Index
  2. Останавливать сборку, если CVSS ≥ 7.0
  3. Пропускать тестовые компоненты
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
vulnerability:
  oss_index_enabled: true
  oss_index_url: "https://ossindex.sonatype.org/api/v3/component-report"
  oss_index_user: "OSS_INDEX_USER"
  oss_index_token: "OSS_INDEX_TOKEN"
  oss_index_batch_size: 128
  oss_index_keep_safe: false
  fail_score: 7
  skip_no_versions: false
  skip_checks: [ "junit:junit:*" ]
  cache_backend: "json"

Файл конфигурации

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
base:
  cache_off: false
  cache_time: 600
  cache_backend: "json"

  # Настройки Redis кэша
  redis_host: "localhost"
  redis_port: 6379
  redis_key: "maven_check_versions_artifacts"
  redis_user: null
  redis_password: null

  # Настройки Tarantool кэша
  tarantool_host: "localhost"
  tarantool_port: 3301
  tarantool_space: "maven_check_versions_artifacts"
  tarantool_user: null
  tarantool_password: null

  # Настройки Memcached кэша
  memcached_host: "localhost"
  memcached_port: 11211
  memcached_key: "maven_check_versions_artifacts"

  fail_mode: false
  fail_major: 0
  fail_minor: 0

  search_plugins: false
  process_modules: false

  show_skip: false
  show_search: false

  empty_version: false
  show_invalid: false
  skip_version: true

  threading: false
  max_threads: 8

  user: "USER"
  password: "PASSWORD"

# Настройки проверки уязвимостей
vulnerability:
  oss_index_enabled: true
  oss_index_url: "https://ossindex.sonatype.org/api/v3/component-report"
  oss_index_user: "OSS_INDEX_USER"
  oss_index_token: "OSS_INDEX_TOKEN"
  oss_index_batch_size: 128
  oss_index_keep_safe: false

  fail_score: 0
  cve_reference: false
  skip_no_versions: false
  skip_checks: []

  cache_backend: "json"

  # Настройки Redis для проверки уязвимостей
  redis_host: "localhost"
  redis_port: 6379
  redis_key: "maven_check_versions_vulnerabilities"
  redis_user: null
  redis_password: null

  # Настройки Tarantool для проверки уязвимостей
  tarantool_host: "localhost"
  tarantool_port: 3301
  tarantool_space: "maven_check_versions_vulnerabilities"
  tarantool_user: null
  tarantool_password: null

  # Настройки Memcached для проверки уязвимостей
  memcached_host: "localhost"
  memcached_port: 11211
  memcached_key: "maven_check_versions_vulnerabilities"

# Настройки HTTP-доступа к POM
pom_http:
  auth: true

# Настройки urllib3
urllib3:
  warnings: true

# Настройки requests
requests:
  verify: true

# Список POM-файлов для обработки
pom_files:
  pom-name: "path/to/pom.xml"

# Конфигурации репозиториев
repositories:
  "Central (repo1.maven.org)": "repo1_maven"

# Настройки для repo1.maven
repo1_maven:
  base: "https://repo1.maven.org"
  path: "maven2"
  auth: false
  repo: "maven2"
  service_rest: false

Переменные окружения

Инструмент поддерживает переменные окружения для переопределения настроек или предоставления учетных данных. Формат: CV_<KEY> где <KEY> соответствует ключу конфигурации раздела base.

ПеременнаяОписаниеПример
CV_CACHE_OFFОтключает кэш при установке в true.true
CV_CACHE_TIMEВремя жизни кэша в секундах.3600
CV_FAIL_MODEВключает режим отказа при установке true.true
CV_FAIL_MAJORУстанавливает порог по основной версии.1
CV_FAIL_MINORУстанавливает порог по младшей версии.2
CV_SEARCH_PLUGINSВключает поиск плагинов при установке true.true
CV_PROCESS_MODULESВключает обработку модулей при установке true.true
CV_SHOW_SKIPЛогирует пропущенные зависимости при true.true
CV_SHOW_SEARCHЛогирует действия поиска при true.true
CV_EMPTY_VERSIONРазрешает пустые версии при true.true
CV_SHOW_INVALIDЛогирует некорректные зависимости при true.true
CV_THREADINGВключает многопоточность при true.true
CV_MAX_THREADSМаксимальное число потоков при многопоточности.8
CV_USERПользователь для аутентификации в репозиториях.my_username
CV_PASSWORDПароль для аутентификации в репозиториях.my_password

Другие разделы формируются как CV_<SECTION>_<KEY>.

Пример использования

1
2
export CV_CACHE_TIME=1800
maven_check_versions --pom_file path/to/pom.xml

Лицензия

Этот проект распространяется под лицензией MIT. Подробнее см. файл LICENSE.