Официальную информацию по агенту можно почитать тут (ИТС).
Надеюсь кому-то будут полезны мои заметки о работе агента конфигуратора, так как лично меня ожидали некоторые трудности в работе с SSH и вызовом множественных (многострочных/пакетных) команд.
Задача
Выгрузить справочник внешних обработок в XML из нашей УПП для контроля версий с помощью Git и для возможности использовать поиск по программному коду. Обработок более 2000, так что для выгрузки каждой обработки в XML запускать конфигуратор с ключом DumpExternalDataProcessorOrReportToFiles было как-то не спортивно.
Было решено использовать агент с его командой config dump-external-data-processor-or-report-to-files, она же dump-ext-files.
Запускаем агент
Агент - это по сути SSH сервер, который управляет конфигуратором. Так что несмотря на то, что никакая база для выгрузки внешних epf вроде бы и не нужна, все равно пришлось создать отдельную пустую базу для его работы. Строка запуска будет выглядеть так:
c:\Program Files\1cv8\common>1cestart.exe DESIGNER
/ibname Пустая
/AgentMode
/AgentSSHHostKeyAuto
/AgentBaseDir "C:\Users\i.netkachev\Documents\Внешние в XML\Export"
/Visible
Самый интересный параметр это /AgentBaseDir, поскольку все пути используемые при вызове команд будут строиться относительно этого каталога. Параметр /Visible поможет нам убедиться, что все работает.
Подключаемся к агенту
Мы работаем на Windows 10, в ней уже есть встроенный ssh клиент, но по каким-то причинам он мне не подошёл (кажется не было возможности подсунуть на вход файл с исполняемыми командами).
Для подключения к SSH агента я использовал консольную утилиту plink. Это один исполняемый файл, что может быть очень удобно. Скачать можно с официального сайта (прямые ссылки: x64/x86).
Для начала подключимся и проверим, а работает ли вообще:
plink.exe -ssh -l admin -pw 1 -P 1543 localhost
где
-l admin -- логин пользователя информационной базы с полными правами/правом работы с агентом
-pw 1 -- его пароль.
-P 1543 -- стандартный порт работы агента
localhost -- адрес агента (может быть быть запущен на другом компьютере).
Если всё хорошо, то мы получим надпись Access granted
Жмем Enter и ...
уже настораживает кодировка. Ничего страшного потом поправим.
Выгрузка обработок
Агент всегда первым делом ждет команду
common connect-ib
и только потом в этой сессии мы можем вызывать выгрузку epf (file - целевая папка, ext-file - путь к внешней обработке):
config dump-ext-files --file="..\XML-EPFs\root\blabla.erf" --ext-file="..\EPFs\root\blabla.erf"
После всего этого нужно отключиться от базы
common disconnect-ib
и, если необходимо, завершить работу самого агента
common shutdown
Пакетная работа с агентом
Вообще plink поддерживает входной файл команд указанный в параметре -m, но этот фокус у меня не прокатил, т.к. агент не может работать без пауз между командами (я так понял это проблема всех терминалов), но слава богу plink поддерживает указание команд в качестве аргумента.
Собираем многострочную команду cmd:
(
echo common connect-ib
timeout /t 5 > nul
echo config dump-ext-files --file="..\XML-EPFs\root\1.erf" --ext-file="..\EPFs\root\1.erf"
timeout /t 1 > nul
echo config dump-ext-files --file="..\XML-EPFs\root\2.erf" --ext-file="..\EPFs\root\2.erf"
timeout /t 1 > nul
echo config dump-ext-files --file="..\XML-EPFs\root\3.erf" --ext-file="..\EPFs\root\3.erf"
timeout /t 1 > nul
echo common disconnect-ib
timeout /t 5 > nul
)| plink.exe -ssh -l admin -pw 1 -P 1543 localhost -T -batch
Тем самым имитируем ввод из cmd с помощью "echo", и притормаживаем следующий ввод с помощью команды "timeout /t 5 > nul", за это время агент успеет выполнить предыдущую команду (иначе ничего не получится).
Волшебный ключ -batch говорит plink-у о том, что интерактивных действий-подтверждений мы видеть не хотим, а ключ -T делает нечто звучащее как disable pty allocation :)
Что в итоге?
В итоге мы получаем ускорение примерно на 70%, относительно запуска конфигуратора для каждой обработки.
Буду рад, если где-то укажете на мою дремучесть или наличие альтернативных подходов по пакетному вызову команд агента.
В интернетах искалось очень тяжело, так что решил может эта статья кому-то поможет + прошу в комментарии.
Также прикрепляю обработку-пример, которая выгружает внешние обработки из справочника в файлы, по-пути собирая .bat скрипты вызова plink-а + выгрузка кода модулей из обычных форм (благодаря вот этой крутой публикации: //infostart.ru/1c/articles/825100/). Обработка делалась исключительно для себя, так что даже путь прописан хардкодом. Тестировалось на 8.3.11.3034.