Upload
positive-hack-days
View
200
Download
2
Embed Size (px)
Citation preview
CrossPM Упрощаем сложные зависимости
Александр КовалевВедущий программист
отдела технологий разработки (DevOps)[email protected]
Пакетный менеджер:
Что мы хотим
Нерешенные проблемы со сборками
Отсутствие единого инструмента, реализующего модель сборок
Нерешенные проблемы со сборками
К чему это привело
CrossPM: Серебряная пуля
Наше решение
Open Source
Подготовка и вывод проекта в сообщество DevOpsHQ
CrossPMconfig.yaml
cpm.manifest
environment
Загруженныезависимости
command line
Artifactoryadapter
Gitadapter
Whateveradapter
...
Любая структура каталогови имен файлов в репозитории
Формат описаниязависимостей указываетсяв config.yaml
Просто выполнитьpip install crosspmперед использованием
Логичная структура проекта,ведется работа подокументированию кода
CrossPM:
Возможности и примеры
CrossPM: Что он может
• Найти пакеты, от которых зависит ваш проект• Найти пакеты, от которых зависят эти пакеты
• Найти пакеты, от которых зависят и эти пакеты тоже• И т.д…
• И т.д…• И т.д…
• Распаковать загруженные пакеты• Создать shell скрипт для установки путей к пакетам в переменные окружения
• Или cmd скрипт• Или python скрипт• Или json файл• Или просто вывести в stdout
• Если Вам этого мало – пойдем пообщаемся… в хорошем смысле
• Загрузить все эти найденные пакеты• Или загрузить только указанный пакет• Или просто вернуть полный путь или имя файла пакета
CrossPM: Конфигурация формата манифеста
crosspm.yaml (фрагмент)
cpm.manifest (пример)boost 1.55.3poco 1.46.14openssl 1.0.20log4cplus 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 snapshotpoco 1.46.>=14 1.46-pm * releaseopenssl 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 >snapshotpoco 1.46.>=14 1.46-pm * releaseopenssl 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)[email protected]
https://github.com/devopshq/crosspm
Вопросы?