Расширение 1С, которое ставит в базу другие расширения, внешние обработки
и отчёты (.cfe, .epf, .erf), забирая их из GitLab или GitHub.
Вместо «скинь мне cfe в почту» получается обычный список пакетов с версиями: видно, что установлено, что вышло новее, и можно обновиться в один клик.
Требуется платформа 8.3.23 или новее: ниже расширение не применяется.
Работа делится на две независимые половины.
Публикация. Ваш пайплайн собирает пакет и выкладывает файл в реестр провайдера. Менеджер в этом не участвует.
Установка. Менеджер читает у провайдера уже опубликованное и ставит выбранную версию в базу.
Где менеджер ищет пакеты:
| Провайдер | Откуда берутся пакеты | Что считается именем и версией |
|---|---|---|
| GitLab | Generic Package Registry проекта | имя и версия package в реестре |
| GitHub | Releases репозитория | имя ассета без расширения, тег без ведущей v |
Файл pm-packages.json нужен только пайплайну, чтобы знать, что
собирать. Менеджер его не читает и не требует.
- Настройте публикацию в своём репозитории — см. «Публикация пакетов». Если пакеты уже лежат в реестре или в релизах, шаг пропускается.
- Заведите источник: справочник Источники пакетов, кнопка «Создать».
Укажите провайдера, адрес сервера и путь проекта (
группа/проектдля GitLab,owner/repoдля GitHub). Для закрытого проекта — токен на чтение. Кнопка «Проверить источник» сразу скажет, виден ли проект. - Откройте Менеджер пакетов, нажмите «Заполнить», отметьте нужные пакеты и нажмите «Установить».
Одна строка справочника — это проект, а не отдельный пакет. Все пакеты проекта появятся в списке сами. Поле «Имя пакета» — необязательный фильтр: заполните его, если из проекта нужен только один package.
В корне репозитория заведите pm-packages.json — список того, что собирать:
{
"packages": [
{ "path": "src/cfe/my-extension", "kind": "cfe" },
{ "path": "src/epf/my-report", "kind": "erf" }
]
}path— каталог с исходниками в формате выгрузки Конфигуратора. Может лежать внутри сабмодуля, каталог не обязан называтьсяsrc/cfe.kind—cfe,epfилиerf, необязателен.- Что не перечислено, не публикуется. Каталог
srcцеликом не сканируется.
Заготовку шага CI отдаёт обработка Генератор шаблонов публикации:
GitLab CI, GitHub Actions и Jenkins. Для GitLab файлы кладутся в tools/ci/.
Она же подсказывает, какие переменные и токены завести в самой системе CI.
Что важно знать про версии:
- версия пакета берётся из метаданных, а не из тега. У расширения это
Версияв свойствах, у.epfи.erf—ПараметрыРегистрации.ВерсиявСведенияОВнешнейОбработке; - тег только запускает пайплайн. В GitLab его формат может быть любым и с версией пакета не связан;
- в GitHub версия обязана совпасть с тегом, иначе ассет не попадёт в релиз;
- пайплайн считает сумму исходников. Та же версия и та же сумма — публикация пропускается. Та же версия и другая сумма — ошибка: поднимите версию.
Установщик выбирается по типу файла:
| Файл | Что происходит |
|---|---|
.cfe |
расширение записывается в базу, нужен перезапуск сеанса |
.epf, .erf |
файл открывается сразу, в базу не устанавливается |
Несколько пакетов ставятся одной пачкой: сначала скачиваются все, потом записываются, и перезапуск предлагается один раз в конце.
Кнопка «Проверить обновления» помечает пакеты, у которых в источнике есть версия новее установленной.
Регламентное задание Проверка обновлений пакетов по умолчанию выключено. Если включить его и настройку «Обновлять отмеченные пакеты по расписанию», фон будет ставить последнюю версию, но только у пакетов с галкой «Автообновление». Всё подряд не обновляется никогда.
Расширение, установленное мимо менеджера — вручную через Конфигуратор или
ещё до появления менеджера, — подхватывается при заполнении списка: в графе
«Установленная версия» появится версия из свойств самого расширения.
Менеджер узнаёт его по имени пакета либо по транслитерации этого имени:
в реестре GitLab имя пакета обязано быть ASCII, поэтому пайплайн
транслитерирует имя расширения (БИТАдаптер → BITAdapter).
При старте сеанса менеджер сверяет свой список с расширениями базы. Если расширение сняли вручную, запись об установке снимется сама. Сверка идёт по имени расширения в базе, а не по имени пакета: они не совпадают.
| Роль | Что даёт |
|---|---|
пм_РаботаСМенеджеромПакетов |
работа с менеджером и установка пакетов |
пм_ЧтениеИсточниковПакетов |
просмотр источников |
пм_ДобавлениеИзменениеИсточниковПакетов |
заведение и правка источников |
Адрес сервера, путь проекта и токен живут только в карточке источника. В код, шаблоны CI, логи и эту документацию они не попадают.
«Код ответа: 403» и речь про лимит запросов. GitHub без токена быстро упирается в лимит по IP. Укажите токен в источнике — лимит станет выше — или повторите позже: в тексте ошибки будет время, когда лимит сбросится.
«Код ответа: 403» или «401» с токеном. Токен просрочен либо не даёт
чтения. Для GitHub достаточно Contents: Read, для GitLab — read_api.
«Код ответа: 404». Обычно путь проекта. Для GitHub он строго
owner/repo, лишние сегменты и .git не годятся.
Пакет установлен, но платформа сообщила о применимости. Расширение записано, а платформа увидела некритичные замечания. Проверка идёт по всем расширениям базы, поэтому в сообщение попадают и замечания чужих расширений. Если после перезапуска расширение работает, замечание можно игнорировать. Полный текст остаётся в журнале регистрации.
«Новая версия не применяется к этой конфигурации». Платформа нашла
критичную проблему, и пакет не установлен — прежняя версия осталась на месте.
Частая причина: расширение заимствует объект Language, а в заимствованном
объекте хранится UUID языка той конфигурации, где расширение разрабатывали.
В любой другой базе UUID другой, и контролируемое свойство
ExtendedConfigurationObject не совпадает. Лечится в самом пакете: язык
заимствовать не нужно.
«Версия содержит несколько файлов». В одной версии пакета лежит больше одного устанавливаемого файла, и выбрать наугад нельзя. Публикуйте один файл на версию либо укажите имя файла.
Пропала установленная версия. Расширение сняли из базы вручную — сверка при старте убрала запись. Нажмите «Заполнить»: если расширение на месте, версия подхватится обратно, иначе поставьте пакет заново.
