Добрый день.
На сегодняшний день разработка в BPMOnline ведется "на коленке". Разработчик вручную кладет исходники в нужное место, вручную обновляет конфигурацию в системе...А если есть тестовый сервер, количество операций увеличивается.
Возникло желание сделать процесс разработки цивилизованным, внедрить систему контроля версий, настроить автоматическую сборку, тестовый сервер.
Вопрос: как можно организовать автоматическую сборку? Приветствуются любые идеи и предложения.

Нравится

31 комментарий

Добрый день!

Не совсем понятен вопрос. Чтоб дать рекомендации по поводу организации автоматической сборки – нужно понимать, какие есть исходные данные. По идее, у Вас есть только собранные бинарники и БД (которые готовит наша автосборка). Автоматизировать сборку автоматически собранной сборки не имеет практического смысла, разве что, если имелось в виду что-то другое.

Прошу уточнить вопрос: как минимум описать подробно шаги, которые сейчас выполняются вручную

Самый простой вариант:
1) Разработчик изменяет код
2) Заходит в Инструменты -> Конфигурация
3) Исходный код -> Сгенерировать для выбранных элементов
То есть хотелось бы автоматизировать запуск автоматической сборки, чтобы она запускалась по расписанию без участия живых людей.

Можно сгенерировать исходные коды конфигурации с помощью SolutionConsole, см. команду RegenerateSchemaSources:

Предназначение и миссия
Данная утилита предназначена для автоматической (скажем запуск по расписанию) и в основном массовой работы со схемами и данными. Позволяет осуществлять перегенерацию исходников, метаданных и структуры базы данных, выгружать и загружать данные, структуру схем и метаданные. Так же используется для переноса изменений с одной базы на другую, включая разные СУБД.
 
Описание и назначение параметров
1. Основные обязательные параметры
На основании этих параметров происходит соединение с базой и конфигурацией.
 
-solution=<Название конфигурации>
Допустимые значения: 
<Название конфигурации> - конфигурация над которой будет выполнятся операция
<*> - имя конфигурации не указано. Логин будет осуществляться на прямую в базу без привязки к конфигурации. Доступны будут только системные схемы.
Обязательность: нет
 
-user=<Имя пользователя>
Допустимые значения:
<Имя пользователя> - имя пользователя системы имеющего права доступа к конфигурации
<Имя пользователя> - имя пользователя базы данных в случае когда -solution=*
Обязательность: да
 
-password=<Пароль пользователя>
Допустимые значения:
<Пароль пользователя> - пароль пользователя системы имеющего права доступа к конфигурации
<Пароль пользователя> - пароль пользователя базы данных в случае когда -solution=*
Обязательность: да
 
2. Параметр операции
-operation=<Название операции>
Описание:
Параметр, определяющий операцию, которую будет осуществлять утилита.
Допустимые значения:
<ExtractSolutionData> - выгрузка конфигурации
<LoadSolutionData> - загрузка выгруженной ранее конфигурации
<LoadSystemDBData> - загрузка выгруженных ранее данных только для системных схем
<UpdateConfigurationDBStructureAndData> - обновляет структуру таблиц и данные в текущей базе данных для конфигурационных схем выгруженными ранее данными
<UpdateSystemDBStructureAndData> - обновляет структуру таблиц и данные в текущей базе данных для системных схем выгруженными ранее данными
<UpdateConfigurationRightsDBStructure> - обновляет структуру таблиц прав для конфигурационных схем
<ReGenerateSchemaSources> 
<GenerateUpdateSystemDBStructureSqlText> - генерирует Sql скрипт обновления структуры системных таблиц на основании выгруженных ранее данных о схемах
<GenerateUpdateSystemDBDataSqlText> - генерирует Sql скрипт обновления данных системных таблиц на основании выгруженных ранее данных
<ReGenerateSchemaMetaData>

Вот пример вызова операции перегенерации:

Terrasoft.Tools.SolutionConsole.exe "-user=Supervisor" "-password= Supervisor " -solution=TSBpm -destinationPath=C:\Temp\SR -Operation=ReGenerateSchemaSources -contentTypes=Localization -logPath=C:\Temp\Log -ignoreLocking=true

Предварительно обязательно указать корректную строку подключения к БД в конфиге приложения (Terrasoft.Tools.WorkspaceConsole.exe.config)

И скопировать из Terrasoft.WebApp\bin\ все файлы в папку с SolutionConsole

Вот пример вызова операции перегенерации:

Terrasoft.Tools.SolutionConsole.exe "-user=Supervisor" "-password= Supervisor " -solution=TSBpm -destinationPath=C:\Temp\SR -Operation=ReGenerateSchemaSources -contentTypes=Localization -logPath=C:\Temp\Log -ignoreLocking=true

Предварительно обязательно указать корректную строку подключения к БД в конфиге приложения (Terrasoft.Tools.WorkspaceConsole.exe.config)

И скопировать из Terrasoft.WebApp\bin\ все файлы в папку с SolutionConsole

Исходные коды удалось получить.
А как можно загрузить из консоли изменения, т.е. например .md файл?

Антон, операция LoadSolutionData + опция includedSchemas

Опции операций:
-destinationPath=<Путь к папке>
Описание:
Путь к папке, в которую будет осуществляться выгрузка или из которой будет происходить загрузка файлов данных.
Допустимые значения:
<Путь к папке> - путь к папке хранения файлов данных используемых утилитой
Обязательность: да
 
-includedSchemas=<Имя схемы,Имя схемы,Имя схемы,…>
Описание:
Список схем, для которых необходимо выполнить операцию. В случае отсутствия параметра операция выполняется для всех схем
Допустимые значения:
<Имя схемы> - имя схемы
<Имя схемы,Имя схемы,Имя схемы,…> - список схем через запятую
Обязательность: нет

Дмитрий,

Не удалось загрузить схему. Указал путь к папке, там один файл .cs.
Ошибка:
ERROR: Идентификатор GUID должен содержать 32 цифры и 4 дефиса (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).

Попытался сделать ExtractSolutionData:
Сформировались файлы:
SolutionResources.xml
SysSchemaFolder.dat
SysSchemaInSolution.dat
и папки повторяющие элементы конфигурации в веб-интерфейсе. Но сами папки не содержат файлов.
Как я понимаю должны быть и файлы?

Проверил у себя - всё отлично, внутри папок (структура конфигурации) есть схемы.

Вот команда:

Terrasoft.Tools.SolutionConsole.exe -solution=TSBpm -user=supervisor -password=Supervisor -operation=ExtractSolutionData -destinationPath=C:\Temp\SR -logPath=C:\Temp\SR\Log

Вот скриншот:

Что то на нашей конфигурации не работает.
Делаю такую же команду

Terrasoft.Tools.SolutionConsole.exe "-user=Supervisor" "-password=*****" -solution=TSBpm -destinationPath=C:\BPMSrcAuto -Operation=ExtractSolutionData -logPath=C:\BPMSrcAuto\log

Версия 5.4.0.2028

Лог ошибки:

=== 09:09:12.4443 ===
Start info:
	Operation: ExtractSolutionData
	Solution: TSBpm
	User: Supervisor
	UserPassword: **
	DestinationPath: C:\BPMSrcAuto
 
ERROR: Не удалось найти часть пути "C:\BPMSrcAuto\BPMonline CRM\Конфигурационные элементы\Контакты\Продукты\BaseOfferingInterest.cs".

Здравствуйте.

Ошибка или в доступа к папке (не может создать под каталоги) или в русских символах. Локализация Windows у Вас какая? Какой язык для non-unicode?

До этого у меня каталоги создавались, но были пустые.
Windows русская, язык non-unicode - русский.

Антон, не готов Вам указать точную причину возникновения данной проблемы. Если есть возможность - предоставьте бекап Вашей БД на support@terrasoft.ru, либо обратитесь на этот же имейл с уточнением даты и времени, когда к Вам можно будет удаленно подключится для анализа причин проблемы.

Вот здесь пытаюсь решить тоже самое
http://www.community.terrasoft.ru/forum/topic/10139

"Олейник Дмитрий" написал:

Антон, не готов Вам указать точную причину возникновения данной проблемы. Если есть возможность - предоставьте бекап Вашей БД на support@terrasoft.ru, либо обратитесь на этот же имейл с уточнением даты и времени, когда к Вам можно будет удаленно подключится для анализа причин проблемы.

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


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

Антон, Team Viewer.

Кстати, по ссылке выше, решена проблема загрузки схем.
С выгрузкой проблем не возникало.

Добрый день
Прислали новую версию ядра и ExtractSolutionData заработало.
Возник вопрос:
1.Что за файлы json генерируются, как их применять?
2.можно ли определить, чтобы генерировались только cs или только md например?

Здравствуйте, Антон!
1. Эти файлы практически бесполезны, функционал добавлялся для каких-то "узких" задач, вероятно связанных с интеграцией. Ценность имеют *.md файлы, так как в них содержатся все метаданные схем.
2. Для этого существует параметр "contentTypes":

-contentTypes=<Тип данных для операции>|<Тип данных для операции>|…
Описание:
Определяет тип данных, которые необходимо выгрузить или загрузить. Можно указать несколько типов через знак «|».
Допустимые значения:
<Source> - исходники схем. Расширение файлов “*.cs<MetaData> - метаданные схем. Расширение файлов “*.json<Data> - данные хранящиеся в базе для данных схем. Расширение файлов “*.dat<Localization> - ресурсы схем. Расширение файлов “*.tsresx<CodeReviewData> - данные для CodeReview. Расширение файлов “*. mdcs<LocalizableData> - данные схем для локализации. Выгружается или в файл "SolutionLocalizableData.xml" или в файл указанный в параметре –fileName
<ExportData> - метаданные схемы с дополнительной информацией о схеме (состояние, название, имя менеджера). Выгрузка идет напрямую из базы. Расширение файлов “*.md<All> - все перечисленные выше типы

Добрый день,

Новое ядро применил на предпродакшн сервер, и сгенерировал cs файлы.
Возникло много изменений в одних и тех же схемах разной версии ядра вида:
было:

method.ZipBody = new byte[] { 31,139,8,0,0,0,0,0,4,0,173,143,77,11

стало:

method.Body = @"base.SetCustomFilterDetails();
List<string> filteredColumn = new List<string>();
filteredColumn.Add(""StartDate"");
filteredColumn.Add(""DueDate"");

Можете подсказать с чет это связано? Возможно это какая то настройка в конфиге?

Еще один вопрос созрел: а возможно генерировать .cs файлы без учета группы, т.е. также как и .md файлы в одной папке?

Здравствуйте, Антон!
По первому Вашему вопросу. Тут дело в том, что по-разному генерируются храняться метаданные методов. Ничего страшного в этих изменениях нет.
По второму вопросу. Файлы .cs можно также выгружать, настроив должным образом Web.config приложения. Тогда все файлы выгружаются в одну папку, и можно отлаживаться, если требуется.

По второму хотел уточнить:
Я полагал, что может есть параметр у Terrasoft.Tools.SolutionConsole.exe.
В предложенном варианте много "ручных действий", например опубликовать схему. Цель не отладка, а хранение исходных кодов в git, для этого уже есть bat файл.

Но проблема с папками, т.к. иногда получается, что схемы импортируются в другую группу, а не где ранее был объект.

Здравствуйте, Антон!
К сожалению, такого параметра нет.
Но, возможно, Вам будет полезна следующая информация. В БД хранятся все версии элементов конфигурации в таблице [SysSchemaInSolution]. Актуальной считается та запись, у которой значение поля [Version] максимальное.
В этой же таблице есть привязка схемы к группе (поле [SysFolderId]). Можно для всех схем прописать одну и ту же группу, что решит Вашу задачу.

Спасибо за хорошую идею, так и сделаю)

Добрый день,
А есть подобная утилита для версии 7.2?
Похоже это "\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe" ?
Но выдает что не знает ExtractSolutionData.

Добрый день.

Описание утилиты WorkspaceConsole можно найти в документации BPMonline
http://www.training.terrasoft.ru/sites/default/files/BPMonline_Setup_Guide_MSSQL_7.3.0.pdf

Начиная со страницы 20.

Спасибо.
Как я понял теперь нет операции ExtractSolutionData для экспорта всего кода конфигурации в .cs файлы. Ругается что операция не известная. ContentType = Source - тоже нету.
Есть какой то способ получить .cs код всей конфигурации?

Добрый день, Антон!
Действительно, WorkspaceConsole не позволяет выгружать cs-файлы. Если есть необходимость, можно в Web.config приложения (по пути %SitePath%\Terrasoft.WebApp\) указать для параметра "IncludeDebugInformation" значение "true", а в параметре "CompilerSourcesTempFolderPath" - путь к папке, куда будут выгружены cs-файлы.
Файлы будут выгружены при компиляции конфигурации.
Но если Вы хотите просто хранить конфигурацию где-либо на стороне, подобный подход не приемлен для 7.х. Лучше либо выгружать свои пакеты, либо настроить SVN.

Добрый день,
В 7.2.0.1331 предложенный метод CompilerSourcesTempFolderPath заработал, спасибо.
Пробую сделать тоже самое в версии 7.2.2.342 исходники не появляются в указанной папке. Сравнивал доступ к папке, дал всем полный доступ, не помогло.
Можете подсказать куда еще капать?

в web.config добавил:

    <add key="IncludeDebugInformation" value="true" />
    <add key="IncludeXmlDocumentation" value="false" />
    <add key="CompilerSourcesTempFolderPath" value="D:\Terrasoft\WebApp\Debug\" />

Здравствуйте, Антон!

Компилировали конфигурацию? Вы вносили изменения в web.config, который лежит в папке Terrasoft.WebApp?

"Резниченко Сергей" написал:

Здравствуйте, Антон!

Компилировали конфигурацию? Вы вносили изменения в web.config, который лежит в папке Terrasoft.WebApp?


Спасибо, упустил этот момент. Внес изменения в Terrasoft.WebApp и заработало.

Показать все комментарии