v8-runner

v8project.yaml

Два файла

ФайлЧто хранитКонтроль версий
v8project.yamlФормат, наборы исходников, общие настройки инструментов и командКоммитится вместе с исходниками
v8project.local.yamlАдреса баз, учётные данные и переопределения для этой машиныДобавьте в .gitignore

Оба файла используют YAML: вложенность задаётся пробелами. Названия ключей чувствительны к регистру. Строки соединения удобно заключать в кавычки.

Как раннер находит файл

По умолчанию читает v8project.yaml в текущем каталоге. В родительских каталогах не ищет. Другой путь задаётся через --config или переменную окружения V8TR_CONFIG; явный ключ имеет приоритет.

v8-runner --config path/to/v8project.yaml push

Локальный файл ищется рядом с выбранным основным файлом, всегда под именем v8project.local.yaml.

Относительные пути исходников и рабочего каталога считаются от каталога основного файла.

Минимальный проект с конфигурацией

workPath: .build         # журналы и временные файлы раннера; можно удалить
format: DESIGNER         # формат исходников: DESIGNER или EDT
source-set:              # наборы исходников проекта
  - name: main           # локальное имя для навигации и адресации в Unica
    # type: CONFIGURATION, EXTENSION,
    #       EXTERNAL_DATA_PROCESSORS или EXTERNAL_REPORTS
    type: CONFIGURATION  # основная конфигурация
    path: src/cf         # каталог относительно v8project.yaml

В src/cf должны лежать исходники конфигурации. Файл можно создать командой init.

Наборы исходников

workPath: .build
format: DESIGNER
source-set:
  - name: main
    type: CONFIGURATION             # основная конфигурация
    path: src/cf
  - name: my-ext                    # локальное имя набора для навигации
    type: EXTENSION                 # расширение конфигурации
    path: src/ext
  - name: tools
    type: EXTERNAL_DATA_PROCESSORS  # внешние обработки
    path: src/epf

Состав и виды исходников подробнее описаны на странице Исходники.

Информационные базы

infobases в v8project.local.yaml задаёт адреса баз для этой машины. Каждая база имеет локальное имя. Имя origin используется, если команда не получила другой выбор.

# v8project.local.yaml
infobases:                        # базы этой машины
  origin:                         # база по умолчанию
    connection: "File=.local/db"  # каталог файловой базы

Адрес записывает init: по умолчанию File=.local/db, иначе значение --infobase. infobase create создаёт базу по этому адресу. Команды обмена используют тот же адрес.

Несколько баз и параметры подключения

Добавьте базы под другими именами. Для файловой базы задаётся File, для серверной — Srvr и Ref. standalone задаёт подключение к автономному серверу.

Для кластерной базы учётные данные разделены на три уровня: user/password — пользователь информационной базы; cluster.user/password — администратор кластера; cluster.agent.user/password — администратор центрального сервера. У центрального сервера и кластера отдельные списки администраторов (документация платформы).

# v8project.local.yaml — не коммитится
workPath: .build
infobases:                             # базы проекта, как remote у репозитория
  origin:                              # умолчание, как у гита
    connection: "File=.local/db"
  test:
    connection: "Srvr=srv;Ref=erp_test"
  prod:
    connection: "Srvr=srv;Ref=erp"
    user: deploy                       # пользователь информационной базы
    cluster:                           # для sessions и создания базы в кластере
      ras: "srv:1545"                  # уже поднятый; без ключа раннер поднимет ras сам
      user: clusteradmin               # имя администратора кластера
      password: "cluster-password"     # пароль администратора кластера
      agent:                           # центральный сервер
        user: "serveradmin"            # имя администратора центрального сервера
        password: "server-password"    # пароль администратора центрального сервера
  ci:
    connection: "Srvr=ibsrv;Ref=demo"  # прямой шлюз автономного сервера
    standalone:                        # объявляет вид цели
      gate: "ibsrv:1543"               # SSH-шлюз: агентский набор без платформы у раннера
      exchange: sftp

Команда принимает --infobase с именем базы или строкой соединения целиком. Строка в ключе позволяет передать адрес из задания сборки без правки файла. Если origin не объявлен, команда требует выбрать базу: init --infobase … или --infobase <имя>.

v8-runner push                                   # в origin
v8-runner push --infobase test                   # в именованную базу
v8-runner apply --infobase prod --sessions force
v8-runner pull --infobase "Srvr=ci;Ref=job-417"  # адрес без правки файла
v8-runner status --all                           # все объявленные базы

HTTP-адрес базы

У базы два адреса: connection нужен для операций с базой, web.url — для открытия опубликованной базы в браузере или тонком клиенте.

# Фрагмент v8project.local.yaml
infobases:
  origin:
    connection: "Srvr=srv;Ref=demo"  # подключение к кластерной базе
    web:
      url: https://srv.example/demo  # адрес веб-публикации
v8-runner launch web             # открыть в браузере
v8-runner launch thin --via web  # открыть тонким клиентом по веб-адресу

web.url задаётся отдельно от connection; его нельзя подставлять вместо строки соединения. Для файловой и кластерной базы нужна веб-публикация. У автономного сервера адрес задаётся по настройкам его встроенного веб-сервера.

Две публикации одной базы — например, demo и demo_int — показаны в примере именованных веб-публикаций План. Именованные публикации объявляются внутри одной базы в web.publications.

Параметры публикации

Чтобы раннер мог опубликовать базу на Apache или IIS, добавьте параметры веб-сервера в ту же секцию web.

# Фрагмент v8project.local.yaml — пример для Apache 2.4
infobases:
  origin:
    connection: "Srvr=srv;Ref=demo"
    web:
      server: apache24               # веб-сервер: iis, apache2, apache22 или apache24
      wsdir: demo                    # имя виртуального каталога
      dir: /var/www/demo             # существующий каталог публикации
      url: https://srv.example/demo  # адрес для открытия базы

server, wsdir и dir нужны команде web publish; url — команде launch. Для apache2 и apache22 также нужен conf — путь к файлу конфигурации Apache. На платформе 8.5.4 и новее apache22 нет, см. версии платформы. Для IIS можно задать os-auth: true — аутентификацию средствами ОС.

v8-runner web publish

Инструменты

tools задаёт поиск и запуск внешних утилит. Например, tools.platform настраивает поиск платформы 1С. tools.postgres.path называет каталог сборки PostgreSQL для 1С, которую поднимает dbms.

Выбор платформы План

Выберите один способ: version — поиск подходящей установленной платформы, path — использование платформы по указанному пути.

# Фрагмент v8project.yaml
workPath: .build
tools:                 # внешние инструменты
  platform:            # платформа 1С
    version: "8.3.27"  # версия для автоматического поиска

Альтернативный вариант — явный путь:

# Альтернативный фрагмент v8project.yaml — пример для Linux
workPath: .build
tools:
  platform:
    path: /opt/1cv8/x86_64/8.3.27.2074  # каталог установленной платформы

Если оба поля отсутствуют, раннер ищет установленную платформу автоматически. Если после объединения основного и локального файлов заданы и path, и version, это ошибка конфигурации. Локальный path не отменяет version из основного файла.

Поддерживаемые версии платформы План

Минимальная версия платформы — 8.3.24. Платформу ниже раннер не запускает: команда, и её превью тоже, отказывает с кодом environment_unavailable и называет путь, найденную версию и минимум. Проверка идёт до запуска, потому что старая платформа может не отвергнуть незнакомую команду, а открыть окно и не завершиться, а срока у команды нет. Команды, которые платформу не запускают, например init и status без --deep, от версии не зависят.

Два ответа устроены иначе. status --deep — диагностика: он отвечает успехом, платформу не запускает, а причину называет в ответе о базе. push без памяти о базе отказывает кодом untracked_base, а причина стоит в skipped; push --force отказывает с environment_unavailable.

Версию раннер видит в пути установки, например /opt/1cv8/x86_64/8.3.27.2074/bin/1cv8, и запускать платформу ради ответа о версии не станет. Если версии в пути нет, отказа не будет, и платформа ниже минимума может зависнуть, поэтому указывайте каталог версии. Подключённый агент (attached) и SSH-шлюз автономного сервера не используют утилиты на машине раннера: их версию раннер не видит, и минимум к ним не применяется.

Выше минимума команды и исполнители те же. Различия по версиям:

ВерсияЧто меняетсяЧто делает раннер
ниже 8.3.24Ни у одного исполнителя нет ключа частичной загрузкиПлатформа не запускается, ответы описаны выше
8.3.24–8.3.26 замерАгент при восстановлении из .dt просит подтвердить свой перезапускinfobase restore выполняет Конфигуратор, агент попадает в skipped с причиной. Если агент назначен ключом providers.infobase.restore, команда отказывает и другого исполнителя не берёт
8.3.24–8.3.26 замерУправляемый агент запускается около 46 с, на 8.3.27 — около 5 с (Windows, файловая база)Результат тот же, команда идёт дольше на время запуска каждой сессии
8.5.4 и новееwebinst больше не знает -apache22web publish с apache22 отказывает и называет apache24

Версия формата выгрузки зависит от версии платформы замер:

Платформа8.3.248.3.258.3.268.3.278.5.18.5.4
Формат2.172.182.192.202.212.22

Платформа загружает формат не новее своего, поэтому исходники с более новой платформы на более старую не переносятся: отказ называет обе версии.

Исполнители операций

providers выбирает, какой инструмент исполнит операцию. Ключ называется именем команды: например, providers.push — исполнитель отправки исходников.

# Фрагмент v8project.yaml
workPath: .build
providers:        # явно выбранные исполнители операций
  push: designer  # отправка через Конфигуратор
  pull: designer  # выгрузка через Конфигуратор

Если ключ не задан, раннер выбирает исполнителя сам. Если задан — использует только указанного исполнителя, без переключения на другого. Для check ветка определяется форматом проекта.

У файловой базы без ключа push и pull выбирают исполнителя ещё и по объёму операции. Когда каждый набор команды идёт целиком — push --force или --full, pull --force, загрузка без снимка, выгрузка без годного файла версий, — первым идёт ibcmd: целиком он выгружает и загружает быстрее. Остальные операции, в том числе команда, где хоть один набор идёт по изменившемуся, начинает агент. Подключённый агент (tools.designer_agent.attach), кластер и автономный сервер выбирают как прежде. Ответ называет выбор полем reason квитанции исполнителя. После полной загрузки через ibcmd раннер записывает файл версий, и следующий pull идёт по изменившемуся.

ключчем управляет
providers.pushотправкой исходников в базу
providers.pullвыгрузкой из базы
providers.apply Планприменением к базе данных
providers.reset Планоткатом основной конфигурации к базе данных
providers.uploadпакетом в базу
providers.downloadпакетом из базы
providers.diffсписком изменений файловой базы. Отчёт сравнения формирует designer.
providers.makeсборкой пакета
providers.convert Планпреобразованием пакета в XML и обратно
providers.extensionsработой со свойствами расширений
providers.infobase.create
providers.infobase.dump
providers.infobase.restore
действиями с базой целиком

Настройки операций

Отправка исходников

При наличии снимка исходников push загружает изменения частично. Порога числа файлов нет. Полная загрузка остаётся без снимка, по push --full и push --force, при первой отправке после создания базы в кластере или копирования базы, для расширений формата EDT, при небезопасном пути и когда удаление нельзя подтвердить по корневому описанию: например, удалён только модуль, справка или содержимое макета. Ключ push.partialLoadThreshold отклоняется при чтении обоих файлов проекта.

Тесты

tests хранит настройки YAxUnit и Vanessa Automation. Общий таймаут выполнения задаётся в секундах; параметры конкретных инструментов лежат в tests.yaxunit и tests.va.

# Фрагмент v8project.yaml
workPath: .build
tests:                            # настройки тестовых инструментов
  execution_timeout_seconds: 300  # таймаут выполнения, секунды

Локальные переопределения

Общие настройки хранятся в v8project.yaml, настройки этой машины — в v8project.local.yaml рядом с ним. Раннер сначала читает основной файл, затем локальный.

Вложенные карты объединяются по ключам: локальное значение заменяет одноимённое основное, остальные значения сохраняются. Значения других типов, включая списки, заменяются целиком.

Локальный файл может переопределять workPath, localPath, providers, tools и tests, а также объявлять infobases. Он не может менять format и source-set: это общие свойства проекта.

Личное состояние копии

workPath пересобирается: его можно удалить. Всё, что пересобрать нельзя, лежит в localPath — по умолчанию .local рядом с v8project.yaml: данные стендов, которые поднимает раннер (dbms, cluster, standalone), и файловая база по умолчанию .local/db. Раннер кладёт в каталог .gitignore со строкой *; в .gitignore проекта можно добавить /.local/. localPath не может содержать каталог проекта или набор исходников и не пересекается с workPath.

Память о базе — хеши исходников, поколение и файл версий — тоже лежит в localPath, в localPath/infobases/<база>/. После удаления workPath стенды, база и память о ней целы: следующий push идёт по изменившемуся. Без памяти о базе — например, если стереть localPath/infobases/<база> — push отказывает с untracked_base и в error.next называет, как восстановить связь.

Исполнитель отправки

Режим полной загрузки задаёт аргумент push --full. В локальном файле можно выбрать исполнителя через providers.push.