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

1c
jenkins

#1

Добрый день!

Очень хочется настроить запуск регл. задания 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-сервиса.


#2

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

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


#3

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


#4

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

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


#5

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


#6

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

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


#7

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

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

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


#8

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


#9

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

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

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

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


#10

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


#11

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


#12

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

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

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


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

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


#14

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

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


#15

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