21
CrossPM Упрощаем сложные зависимости Александр Ковалев Ведущий программист отдела технологий разработки (DevOps) [email protected]

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

Embed Size (px)

Citation preview

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

CrossPM Упрощаем сложные зависимости

Александр КовалевВедущий программист

отдела технологий разработки (DevOps)[email protected]

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

Пакетный менеджер:

Что мы хотим

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

Нерешенные проблемы со сборками

Отсутствие единого инструмента, реализующего модель сборок

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

Нерешенные проблемы со сборками

К чему это привело

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

CrossPM: Серебряная пуля

Наше решение

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

Open Source

Подготовка и вывод проекта в сообщество DevOpsHQ

CrossPMconfig.yaml

cpm.manifest

environment

Загруженныезависимости

command line

Artifactoryadapter

Gitadapter

Whateveradapter

...

Любая структура каталогови имен файлов в репозитории

Формат описаниязависимостей указываетсяв config.yaml

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

Логичная структура проекта,ведется работа подокументированию кода

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

CrossPM:

Возможности и примеры

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

CrossPM: Что он может

• Найти пакеты, от которых зависит ваш проект• Найти пакеты, от которых зависят эти пакеты

• Найти пакеты, от которых зависят и эти пакеты тоже• И т.д…

• И т.д…• И т.д…

• Распаковать загруженные пакеты• Создать shell скрипт для установки путей к пакетам в переменные окружения

• Или cmd скрипт• Или python скрипт• Или json файл• Или просто вывести в stdout

• Если Вам этого мало – пойдем пообщаемся… в хорошем смысле

• Загрузить все эти найденные пакеты• Или загрузить только указанный пакет• Или просто вернуть полный путь или имя файла пакета

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

CrossPM: Конфигурация формата манифеста

crosspm.yaml (фрагмент)

cpm.manifest (пример)boost 1.55.3poco 1.46.14openssl 1.0.20log4cplus 1.1.6

... columns: "*package, version"...

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

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

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

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

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

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

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

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 (фрагмент)

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

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 (фрагмент)

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

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

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

CrossPM:

Интеграция и доработки

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

CrossPM + Artifactory

• Использовали существующий API от Artifactory• Запланировали написать свою библиотеку для работы с Artifactory

Первый этап:

• Обнаружили, что такая библиотека уже существует• Протестировали: библиотека сыровата, но пользоваться уже можно• Разработчикам из Parallels – отдельное спасибо! Ждем развития!

Второй этап (Open Source):

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

CrossPM + Artifactory

+ любое другое хранилище, на самом деле…

• Динамически подключаемые модули для работы с репозиторием:

• Любой способ подключения:• http• ftp, sftp• smb• просто файлы в папках• и прочее…

• Любое количество типов репозиториев

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

CrossPM: Возможные доработки инструмента

• Поддержка дополнительных форматов пакетов

• Повторные попытки загрузки пакетов при разрывах соединения

• Загрузка пакетов в репозиторий

• Управление пакетами в репозитории

Page 20: Пакетный менеджер 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

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

Спасибо!

Даешь единый менеджер для всех пакетов!

Александр КовалевВедущий программист

отдела технологий разработки (DevOps)[email protected]

https://github.com/devopshq/crosspm

Вопросы?