Запуск регламентного задания 1С из Jenkins

Добрый день!

Очень хочется настроить запуск регл. задания 1С из Jenkins.
Логика запуска такая: запустить клиентское приложение 1С, открыть в нем внешнюю обработку, выполнить из нее экспортную процедуру задания, принудительно завершить работу.

pipeline {
agent none
stages {
stage(“Stage 1”) {
agent { label ‘1C_Test’ }
steps {
echo “Запуск задания ERP по выгрузке договоров”
timeout(10) {
bat ‘start “” /wait “C:\Program Files (x86)\1cv8\common\1cestart.exe” “ENTERPRISE /S"localhost\ERP_Test_ODI” /DisableStartupMessages /EXECUTE “C:\1C_Scripts\ITGExch_ExpCust.epf”’
}
}
}
}
}

Агент Jenkins запущен под моей учетной записью (локальный администратор на агенте и полные права в 1С).

При старте билда сессия 1С не запускается, а Stage 1 завершается по тайм-ауту.
Подозреваю, что дело в том, что я пытаюсь выполнить интерактивное действие.

Начинаю думать в сторону использования http-сервиса.

проверить руками, что оно в принципе работает, без Jenkins.
из рабочего каталога джобы, под тем же пользователем

агент Jenkins кстати не как служба установлен?

если база опубликована на веб, можно попробовать инициировать рег задание по http

команда успешно запускается вручную

агент установлен как служба. А как иначе, если я хочу, чтобы билд работал в unattended-режиме? Или есть какой-то способ?

если бы база уже была опубликована, то сделал бы так первым делом.
а публиковать только ради этого пока не хочется.

у 1с проблемы с работой в неинтерактивном режиме. надо настраивать взаимодействие с рабочим столом.

вопрос в догонку - почему не подключить внешнюю обработку в справочник доп обработок и запускать родное бспшное регламентное задание? работает из коробки…

надо настраивать взаимодействие с рабочим столом.

как бы это настроить?

за подсказку с БСПшным заданием спасибо большое, не догадался сразу.

А какую задачу вы пытаетесь решить? Кажется, что имеет место попытка применить неправильный инструмент…

Как сделано сейчас: есть база 1С, есть внешняя система не на 1С. Они обмениваются информацией в таком режиме:

  1. В базе 1С запускается первое регл. задание
  2. В шедулере Windows запускается внешняя система с одними параметрами
  3. В базе 1С запускается второе регл. задание
  4. В шедулере Windows запускается внешняя система с другими параметрами

Практика показала, что очень важно соблюдать правильную последовательность выполнения заданий.
Если процесс обмена упадет на любом из шагов, то после повторного прогона обе системы останутся в целостном состоянии. НО выполнение заданий в порядке, отличном от 1-2-3-4, точно является ошибкой.

Единственный способ вызвать внешнюю систему - запустить ее exe с параметрами. Делать это прямо из 1С мне видится неправильным, к тому же эти системы расположены на разных машинах.

На мой взгляд это все надо переписать. Шедулеры, запускающие что-либо хрупкое, завязанное на последовательность - это путь в никуда, имхо

Да я бы с удовольствием! Только вот система на той стороне не поддается доработке.
Именно поэтому выбор пал на внешний инструмент.

Тогда до внешней системы надо бы поставить проксирующий API. Из Вашего описания не очень понятно, почему в 1С существует второе рег.задание и какова его роль. Навскидку можно предположить такое решение:

  1. В 1С запускается регл. задание. Оно вызывает некий API. Сервер этого API запускает вторую систему с одними параметрами.
  2. В базе 1С вызывается второй метод API. Он запускает систему с другими параметрами

Тут, как отмечал выше - неясен процесс “второго” регзадания в 1С и можно ли его переделать на API. НО смысл такой, что вторая система пускается не шедулером, а управляемым сервисом. Возможно даже самой 1С.

  1. Первое задание 1С выгружает файл для внешней системы со списком новых договоров.
  2. Первое задание внешней системы загружает этот список и выдает в ответ:
  • набор идентификаторов этих договоров
  • баланс по каждому договору
  1. Второе задание 1С прописывает эти идентификаторы у себя в доп. сведениях и выгружает разницу между балансом договора в 1С и во внешней системе).
  2. Второе задание внешней системы загружает дельту баланса.

Идея про проксирующий API интересна. Какими средствами его можно создать?

1script.web или чистый 1с

Приведенная схема сюда укладывается. А если вторая система отрабатывает долго (десятки минут) то этот сервис должен быть асинхронным.

Объедините задания 1С в одно: пусть оно при старте определяет, что там сейчас в папке лежит (результат первого или второго задания внешней системы или результат из 1С) и, отталкиваясь от этого, что-то делает (или не делает, если в папке результат из 1С). И можно после такого уменьшить тайминги запуска 1С заданий.