CrossPM
Упрощаем сложные зависимости
Александр Ковалев
Ведущий программист
отдела технологий разработки (DevOps)
akovalev@ptsecurity.com
Пакетный менеджер:
Что мы хотим
Нерешенные проблемы со сборками
Отсутствие единого инструмента, реализующего модель сборок
Нерешенные проблемы со сборками
К чему это привело
CrossPM: Серебряная пуля
Наше решение
Open Source
Подготовка и вывод проекта в сообщество DevOpsHQ
CrossPM
config.yaml
cpm.manifest
environment
Загруженные
зависимости
command line
Artifactory
adapter
Git
adapter
Whatever
adapter
...
Любая структура каталогов
и имен файлов в репозитории
Формат описания
зависимостей указывается
в config.yaml
Просто выполнить
pip install crosspm
перед использованием
Логичная структура проекта,
ведется работа по
документированию кода
CrossPM:
Возможности и примеры
CrossPM: Что он может
• Найти пакеты, от которых зависит ваш проект
• Найти пакеты, от которых зависят эти пакеты
• Найти пакеты, от которых зависят и эти пакеты тоже
• И т.д…
• И т.д…
• И т.д…
• Распаковать загруженные пакеты
• Создать shell скрипт для установки путей к пакетам в переменные окружения
• Или cmd скрипт
• Или python скрипт
• Или json файл
• Или просто вывести в stdout
• Если Вам этого мало – пойдем пообщаемся… в хорошем смысле
• Загрузить все эти найденные пакеты
• Или загрузить только указанный пакет
• Или просто вернуть полный путь или имя файла пакета
CrossPM: Конфигурация формата манифеста
crosspm.yaml (фрагмент)
cpm.manifest (пример)
boost 1.55.3
poco 1.46.14
openssl 1.0.20
log4cplus 1.1.6
...
columns: "*package, version"
...
CrossPM: Конфигурация формата манифеста
...
columns: "*package, version, branch, contract, quality"
parsers:
common:
columns:
version: "{int}.{int}.{int}[-{str}]"
artifactory:
path: "{server}/{package}/{branch}/{package}.{version}[.zip|.tar.gz|.nupkg]"
properties: "build.contract.{contract} = {quality}"
...
crosspm.yaml (фрагмент)
cpm.manifest (пример)
boost 1.55.*- 1.55-pm R11.0 snapshot
poco 1.46.>=14 1.46-pm * release
openssl 1.>0.* 1.* * *
log4cplus 1.1.6 1.1-pm R10.0 stable
CrossPM: Конфигурация меток качества
...
values:
quality:
1: banned
2: snapshot
3: integration
4: stable
5: release
...
crosspm.yaml (фрагмент)
cpm.manifest (пример)
boost 1.55.*- 1.55-pm R11.0 >snapshot
poco 1.46.>=14 1.46-pm * release
openssl 1.>0.* 1.* * *
log4cplus 1.1.6 1.1-pm R10.0 >=stable
CrossPM: Конфигурация дополнительных опций
...
options:
arch:
cmdline: arch
env: CROSSPM_ARCH
osname:
cmdline: os
env: CROSSPM_OS
default: linux
...
crosspm.yaml (фрагмент)
Командная строка
C:build> crosspm download --out-format=stdout –o arch=x86_64,os=win
CrossPM: Конфигурация источников
...
sources:
- type: artifactory
parser: artifactory
server: https://repo1.someorg.com/artifactory/
repo:
- libs-cpp
- libs.snapshot
auth_type: simple
auth:
- reader_cpp_libs
- "**********"
- type: artifactory
parser: artifactory
server: https://repo1.someorg.com/artifactory/
repo: libs-other.snapshot
auth_type: simple
auth:
- "reader_libs"
- "**********"
...
crosspm.yaml (фрагмент)
CrossPM: Конфигурация источников (упрощение)
...
common:
type: artifactory
parser: artifactory
server: https://repo1.someorg.com/artifactory/
auth_type: simple
sources:
- repo:
- libs-cpp
- libs.snapshot
auth:
- reader_cpp_libs
- "**********"
- repo: libs-other.snapshot
auth:
- "reader_libs"
- "**********"
...
crosspm.yaml (фрагмент)
CrossPM: Командная строка
CrossPM (Cross Package Manager) version: 0.8.1 The MIT License (MIT)
Usage:
crosspm download [options]
crosspm promote [options]
crosspm pack <OUT> <SOURCE> [options]
crosspm -h | --help
crosspm --version
Options:
<OUT> Output file.
<SOURCE> Source directory path.
-h, --help Show this screen.
--version Show version.
-v, --verbose Increase output verbosity.
--verbosity=LEVEL Set output verbosity level: (critical, error, warning, info, ...
-c=FILE, --config=FILE Path to configuration file.
-o OPTIONS, --options OPTIONS Extra options.
--depslock-path=FILE Path to file with locked dependencies [default: ./cpm.manifest]
--out-format=TYPE Output data format. Available formats:(['stdout', 'cmd', ...
--output=FILE Output file name (required if --out_format is not stdout)
--out-prefix=PREFIX Prefix for output variable name [default: ] (no prefix at all)
crosspm --help
CrossPM:
Интеграция и доработки
CrossPM + Artifactory
• Использовали существующий API от Artifactory
• Запланировали написать свою библиотеку для работы с Artifactory
Первый этап:
• Обнаружили, что такая библиотека уже существует
• Протестировали: библиотека сыровата, но пользоваться уже можно
• Разработчикам из Parallels – отдельное спасибо! Ждем развития!
Второй этап (Open Source):
CrossPM + Artifactory
+ любое другое хранилище, на самом деле…
• Динамически подключаемые модули для работы с репозиторием:
• Любой способ подключения:
• http
• ftp, sftp
• smb
• просто файлы в папках
• и прочее…
• Любое количество типов репозиториев
CrossPM: Возможные доработки инструмента
• Поддержка дополнительных форматов пакетов
• Повторные попытки загрузки пакетов при разрывах соединения
• Загрузка пакетов в репозиторий
• Управление пакетами в репозитории
Полезные ссылки
• CrossPM:
https://github.com/devopshq/crosspm
установка:
pip install crosspm
• Python interface library for Jfrog Artifactory:
https://github.com/Parallels/artifactory
• Ждем ваши предложения на DevOpsHQ:
https://github.com/devopshq/crosspm/issues
Спасибо!
Александр Ковалев
Ведущий программист
отдела технологий разработки (DevOps)
akovalev@ptsecurity.com
https://github.com/devopshq/crosspm
Вопросы?

Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев

  • 1.
    CrossPM Упрощаем сложные зависимости АлександрКовалев Ведущий программист отдела технологий разработки (DevOps) akovalev@ptsecurity.com
  • 2.
  • 3.
    Нерешенные проблемы сосборками Отсутствие единого инструмента, реализующего модель сборок
  • 4.
    Нерешенные проблемы сосборками К чему это привело
  • 5.
  • 6.
    Open Source Подготовка ивывод проекта в сообщество DevOpsHQ CrossPM config.yaml cpm.manifest environment Загруженные зависимости command line Artifactory adapter Git adapter Whatever adapter ... Любая структура каталогов и имен файлов в репозитории Формат описания зависимостей указывается в config.yaml Просто выполнить pip install crosspm перед использованием Логичная структура проекта, ведется работа по документированию кода
  • 7.
  • 8.
    CrossPM: Что онможет • Найти пакеты, от которых зависит ваш проект • Найти пакеты, от которых зависят эти пакеты • Найти пакеты, от которых зависят и эти пакеты тоже • И т.д… • И т.д… • И т.д… • Распаковать загруженные пакеты • Создать shell скрипт для установки путей к пакетам в переменные окружения • Или cmd скрипт • Или python скрипт • Или json файл • Или просто вывести в stdout • Если Вам этого мало – пойдем пообщаемся… в хорошем смысле • Загрузить все эти найденные пакеты • Или загрузить только указанный пакет • Или просто вернуть полный путь или имя файла пакета
  • 9.
    CrossPM: Конфигурация форматаманифеста crosspm.yaml (фрагмент) cpm.manifest (пример) boost 1.55.3 poco 1.46.14 openssl 1.0.20 log4cplus 1.1.6 ... columns: "*package, version" ...
  • 10.
    CrossPM: Конфигурация форматаманифеста ... columns: "*package, version, branch, contract, quality" parsers: common: columns: version: "{int}.{int}.{int}[-{str}]" artifactory: path: "{server}/{package}/{branch}/{package}.{version}[.zip|.tar.gz|.nupkg]" properties: "build.contract.{contract} = {quality}" ... crosspm.yaml (фрагмент) cpm.manifest (пример) boost 1.55.*- 1.55-pm R11.0 snapshot poco 1.46.>=14 1.46-pm * release openssl 1.>0.* 1.* * * log4cplus 1.1.6 1.1-pm R10.0 stable
  • 11.
    CrossPM: Конфигурация метоккачества ... values: quality: 1: banned 2: snapshot 3: integration 4: stable 5: release ... crosspm.yaml (фрагмент) cpm.manifest (пример) boost 1.55.*- 1.55-pm R11.0 >snapshot poco 1.46.>=14 1.46-pm * release openssl 1.>0.* 1.* * * log4cplus 1.1.6 1.1-pm R10.0 >=stable
  • 12.
    CrossPM: Конфигурация дополнительныхопций ... options: arch: cmdline: arch env: CROSSPM_ARCH osname: cmdline: os env: CROSSPM_OS default: linux ... crosspm.yaml (фрагмент) Командная строка C:build> crosspm download --out-format=stdout –o arch=x86_64,os=win
  • 13.
    CrossPM: Конфигурация источников ... sources: -type: artifactory parser: artifactory server: https://repo1.someorg.com/artifactory/ repo: - libs-cpp - libs.snapshot auth_type: simple auth: - reader_cpp_libs - "**********" - type: artifactory parser: artifactory server: https://repo1.someorg.com/artifactory/ repo: libs-other.snapshot auth_type: simple auth: - "reader_libs" - "**********" ... crosspm.yaml (фрагмент)
  • 14.
    CrossPM: Конфигурация источников(упрощение) ... common: type: artifactory parser: artifactory server: https://repo1.someorg.com/artifactory/ auth_type: simple sources: - repo: - libs-cpp - libs.snapshot auth: - reader_cpp_libs - "**********" - repo: libs-other.snapshot auth: - "reader_libs" - "**********" ... crosspm.yaml (фрагмент)
  • 15.
    CrossPM: Командная строка CrossPM(Cross Package Manager) version: 0.8.1 The MIT License (MIT) Usage: crosspm download [options] crosspm promote [options] crosspm pack <OUT> <SOURCE> [options] crosspm -h | --help crosspm --version Options: <OUT> Output file. <SOURCE> Source directory path. -h, --help Show this screen. --version Show version. -v, --verbose Increase output verbosity. --verbosity=LEVEL Set output verbosity level: (critical, error, warning, info, ... -c=FILE, --config=FILE Path to configuration file. -o OPTIONS, --options OPTIONS Extra options. --depslock-path=FILE Path to file with locked dependencies [default: ./cpm.manifest] --out-format=TYPE Output data format. Available formats:(['stdout', 'cmd', ... --output=FILE Output file name (required if --out_format is not stdout) --out-prefix=PREFIX Prefix for output variable name [default: ] (no prefix at all) crosspm --help
  • 16.
  • 17.
    CrossPM + Artifactory •Использовали существующий API от Artifactory • Запланировали написать свою библиотеку для работы с Artifactory Первый этап: • Обнаружили, что такая библиотека уже существует • Протестировали: библиотека сыровата, но пользоваться уже можно • Разработчикам из Parallels – отдельное спасибо! Ждем развития! Второй этап (Open Source):
  • 18.
    CrossPM + Artifactory +любое другое хранилище, на самом деле… • Динамически подключаемые модули для работы с репозиторием: • Любой способ подключения: • http • ftp, sftp • smb • просто файлы в папках • и прочее… • Любое количество типов репозиториев
  • 19.
    CrossPM: Возможные доработкиинструмента • Поддержка дополнительных форматов пакетов • Повторные попытки загрузки пакетов при разрывах соединения • Загрузка пакетов в репозиторий • Управление пакетами в репозитории
  • 20.
    Полезные ссылки • CrossPM: https://github.com/devopshq/crosspm установка: pipinstall crosspm • Python interface library for Jfrog Artifactory: https://github.com/Parallels/artifactory • Ждем ваши предложения на DevOpsHQ: https://github.com/devopshq/crosspm/issues
  • 21.
    Спасибо! Александр Ковалев Ведущий программист отделатехнологий разработки (DevOps) akovalev@ptsecurity.com https://github.com/devopshq/crosspm Вопросы?