- Ошибка обнуления конфигурации поставщика при обновлении ИБ через патч (в патче содержится пустая конфигурация поставщика).
1С:CICD
Набор скриптов на 1С:Исполнителе для организации контуров разработки, тестирования, обновления. Для запуска требуется 1С:Исполнитель версии 5.2.11.1.
Исполнение скриптов
Скрипты исполняются с помощью следующего шаблона:
executor <ПутьКСкриптам>main.sbsl <РежимИсполнения> <ОтносительныйПутьККорнюПроекта> <ОстановитьсяВКонце> <ПутьКФайламНастройки>
- executor - команда запуска скрипта, едина для исполнителя U и X.
Для исполнителя X в переменных среды необходимо прописать путь к исполняемому файлу executor, а не bin\executor-x.
-
ПутьКСкриптам - путь к файлу main.sbsl относительно корня репозитория проекта.
-
РежимИсполнения - задает конкретную команду для выполнения скриптов.
-
ОтносительныйПутьККорнюПроекта - указывается относительный путь от рабочего каталога, в котором запускается скрипт (текущий каталог оболочки исполнения), до корня репозитория проекта. Например, если скрипт запускается из каталога bin, то параметр будет иметь следующий вид
..//
.
Внимание. Не следует путать рабочий каталог запуска скрипта с местом расположения файлов скрипта.
-
ОстановитьсяВКонце - 1 - перед завершением исполнения скрипта, будет ожидаться ввод от пользователя (необходим для анализа вывода лога исполнения), 0 - скрипт завершится, не дожидаясь пользователя.
-
ПутьКФайламНастройки - если предполагается хранить файлы настройка не в репозитории проекта, а по альтернативному пути, необходимо в этом параметре указать путь к файлу настройки project_config.json. Файл пользовательской настройки project_user_prop.json автоматически создастся по этому же пути согласно общим правилам инициализации скриптов.
Режимы исполнения скриптов
- init - инициализация репозитория проекта для работы со скриптами.
- build_cf - сборка файла конфигурации из файловой выгрузки xml.
- build_cfe - сборка файлов расширений из файловой выгрузки xml.
- build_patch - сборка архива для обновления из файловой выгрузки xml только по полностью или частично снятых с поддержки объектов.
- build_prod - сборка файла конфигурации из файловой выгрузки xml с дополнительным конвертацией конфигурацией поставщика с целью устранения шума ложных различий между основной конфигурацией и конфигурацией поставщика.
- update_ib_cf - обновление информационной базы собранным файлом cf.
- update_ib_cf_xml - обновление информационной базы из файловой выгрузки xml конфигурации.
- update_ib_cfe - обновление информационной базы собранными файлами cfe.
- update_ib_cfe_xml - обновление информационной базы из файловой выгрузки xml расширений.
- update_ib_patch - частичное обновление информационной базы файлами из каталога с файлами полностью или частично снятых с поддержки объектов.
- check_ib_cf - тестирование конфигурации информационной базы.
- check_ib_cfe - тестирование расширений информационной базы.
- get_ib_configdumpinfo - получение файла bin/.1ccicd/ConfigDumpInfo.xml из информационной базы, где идет разработка, для ускоренной выгрузки в файлы xml измененной конфигурации.
- get_ib_status - получение состояния конфигурации относительно раннее полученного файла bin/.1ccicd/ConfigDumpInfo.xml из информационной базы.
- get_ib_xml - получение файловой выгрузки из информационной базы, где идет разработка.
- new_bin - конвертация файла ParentConfigurations.bin в формат, пригодный для хранения и работы с ним в git хранилище.
- repair_bin - удаление из файла ParentConfigurations.bin битых идентификаторов метаданных.
- new_configdumpinfo - конвертация файла ConfigDumpInfo.xml в формат, пригодный для хранения и работы с ним в git хранилище.
Требуемая структура репозитория проекта
Для корректной работы скриптов проект должен иметь следующую структуру каталогов:
project
|- bin
|- project_user_prop.json
|- Конфигурация.cf
|- Расширения.cfe
|- .1ccicd
|- scripts
|- 1c_cicd
|- src
|- cf
|- cfe
|- ИмяРасширения1
|- ИмяРасширения2
|- project_config.json
|- .gitignore
-
scripts - каталог, где хранятся скрипты.
-
src/cf - каталог с файловой выгрузкой основной конфигурации.
-
src/cfe/* - каталоги с файловой выгрузкой расширений.
-
bin - каталог с собранными файлами конфигураций cf, cfe, patch.
-
bin/.1ccicd - каталог с кэшем для быстрой сборки cfe, также здесь содержится актуальный для ИБ разработки ConfigDumpInfo.xml.
-
project_config.json - файл с общими настройками проекта.
{ "EXT_NAMES" : [ "ИмяРасширения1", "ИмяРасширения2", ], "CHECK": [ "ThinClient", "WebClient", "Server", "ExternalConnection" ], "BIN_DIR" : "bin", "SRC_CFE" : "src\\cfe", "SRC_CF" : "src\\cf", "PLATFORM_VERSION" : "8.3.22" }
- EXT_NAMES - перечисление расширений, которые необходимо собирать в файлы cfe при запуске скрипта в режиме build_cfe.
- CHECK - режимы проверки конфигурации и расширений, принятые на проекте (полное перечисление режимов в файле oc_batch_mode.sbsl).
- BIN_DIR - путь к каталогу bin относительно корня репозитория проекта.
- SRC_CF- путь к каталогу с файловой выгрузкой xml основной конфигурации проекта.
- SRC_CFE - путь к каталогу с файловыми выгрузками xml расширений проекта.
- PLATFORM_VERSION - текущая версия платформы, на которой ведется разработка.
-
project_user_prop.json - файл с пользовательскими настройками проекта.
{ "TEMP" : "bin\\.1ccicd", "PATH_1C" : "D:\\Program Files\\1cv8", "EXEC_MODE" : 2, "CFE_EXEC_MODE" : 1, "CFE_BUILD_MODE" : 2, "IB_LOGIN" : "Администратор", "IB_PASSWD" : "password", "IB_CONNECTION_STRING" : "Srvr=\"develop\";Ref=\"DO\";", "IB_PLATFORM_VERSION" : "", "CHECK" : [ "ThinClient", "WebClient", "Server", "ExternalConnection" ], "HASH" : { "cf" : "d1a01a96c07639833d215549eb2ac4bd", "ар_БиблиотекаПодсистем" : "e5f121aaf21e584461511fc5f5a9a0bd", "ар_ДокументыИФайлы" : "2b2f49331a5c2f2bc03a7f80d30ba06d", "ар_ОбменДанными" : "4a70f956be22cab41748e76d7f492d69", "ар_Роли" : "de5ba153e8d8ef419c072f3925add5bd", "ар_НСИ" : "da6e93d7367780db067c5a3a4e72a352" } }
- HASH - хеши каталогов файловых выгрузок, нужны для того, чтобы сборка файлов проекта выполнялась только в случае изменении в файловой выгрузки относительно предыдущей сборки
- TEMP - каталог с кэшем для быстрой сборки cfe, также здесь содержится актуальный для ИБ разработки ConfigDumpInfo.xml.
- PATH_1C - Альтернативный пусть установки 1С, например, D:\Program Files\1cv8
- EXEC_MODE - режим исполнения для сборки файла конфигурации cf: 1 - пакетный режим, 2 - автономный сервер ibcmd. Рекомендуется использовать 2. (Автономный сервер в 10 раз быстрее собирает конфигурацию)
- CFE_EXEC_MODE - режим исполнения для сборки файлов расширения cfe: 1 - пакетный режим, 2 - автономный сервер ibcmd. Рекомендуется использовать 1. (Из-за текущих ошибок работы автономного сервера с расширениями)
- CFE_BUILD_MODE - режим сборки расширений: 1 - сборка с помощью пустой конфигурации, 2 - сборка с помощью не пустой конфигурации. Рекомендуется использовать 2. (Из-за последних ограничений платформы 1С, сборка cfe через пустую конфигурацию очищает ряд событий. Конфигурация для сборки находится в каталоге bin/.1ccicd)
- CHECK - индивидуальные режимы проверки конфигурации и расширений, принятые на проекте. (Полное перечисление режимов в файле oc_batch_mode.sbsl)
- IB_CONNECTION_STRING - строка соединения до конфигурации, в которой ведется разработка. (Соединение с конфигурацией выполняется в режимах get_ib_configdumpinfo, update_ib_*)
- IB_PLATFORM_VERSION - версия платформы, для работы с конфигурацией ИБ разработки.
- IB_LOGIN - логин конфигурации, в которой ведется разработка
- IB_PASSWD - пароль конфигурации, в которой ведется разработка
-
.gitignore - файл с описанием каталогов, которые не должны учитываться в истории git. В данном случае в нем должен содержаться каталог bin.
/bin
Инициализация репозитория проекта
Для инициализации репозитории проекта для работы со скриптами необходимо выполнить несколько шагов:
-
Выбрать место расположение скриптов, например, в каталоге scripts/1c_cicd. Скрипты можно как просто скопировать с родительского репозитория, так и расположить в качестве подмодуля репозитория git.
-
Создать файл инициализации и расположить его в каталоге bin. Например, файл init.bat со следующим кодом
executor ..\scripts\1c_cicd\main.sbsl init "..\\" 1
-
Необходимо запустить команду инициализации, после чего создадутся следующие файлы
-
Файл настроек проекта ./project_config.json
-
Файл пользовательских настроек bin/project_user_prop.json
-
Пакетные файлы для запуски скриптов в разных режимах bin/*
-
На основе описанной структуры проекта создается файл .git/hooks/precommit с режимами обслуживания репозитория перед фиксацией изменений
#!/bin/sh executor "scripts/1c_cicd/main.sbsl" new_bin "." 0 executor "scripts/1c_cicd/main.sbsl" new_configdumpinfo "." 0 git add "src/cf/Ext/ParentConfigurations.bin" "src/cf/ConfigDumpInfo.xml" "src/cfe/*/ConfigDumpInfo.xml" executor "scripts/1c_cicd/main.sbsl" build_cfe "." 0
Без данных строчек могут возникнуть проблемы при сборке после слиянии изменений. Режим build_cfe не только собирает cfe но и проверяет, что перед фиксацией все изменения создают корректное расширение.
-
Особенности использования файла ConfigDumpInfo.xml
В файловой выгрузке конфигурации содержится очень важный файл ConfigDumpInfo.xml.
<?xml version="1.0" encoding="UTF-8"?>
<ConfigDumpInfo xmlns="http://v8.1c.ru/8.3/xcf/dumpinfo" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" format="Hierarchical" version="2.15">
<ConfigVersions>
<Metadata name="AccumulationRegister.КоличествоДействийЗадач" id="fb076a86-f98a-4262-aae6-9620b66ffe56" configVersion="7968057765e97c4b85bbe9cdba2d6add00000000">
<Metadata name="AccumulationRegister.КоличествоДействийЗадач.Resource.ОжидающихПроверки" id="12ee901e-40ef-403d-97ac-6d417f7f89bc"/>
<Metadata name="AccumulationRegister.КоличествоДействийЗадач.Resource.Просроченных" id="19149630-16cb-4810-bb20-274f0f690254"/>
****
</Metadata>
<Metadata name="AccumulationRegister.КоличествоДействийЗадач.ManagerModule" id="fb076a86-f98a-4262-aae6-9620b66ffe56.2" configVersion="35499d4fcdad694c989da066e77b447600000000"/>
<Metadata name="AccumulationRegister.КоличествоДействийЗадач.RecordSetModule" id="fb076a86-f98a-4262-aae6-9620b66ffe56.1" configVersion="4ad30263ad581f4daaae5dd125fa9c2c00000000"/>
***
-
В нем содержится иерархия объектов метаданных. Данной информации нет в файле Configuration.xml.
-
Иерархия метаданных помогает быстро обратиться к нужному файлу в файловой выгрузке по идентификатору объекта метаданных.
-
Также в нем содержится атрибут configVersion, которые помогает конфигурации выгрузить только измененные объекты относительно предыдущей выгрузки.
-
Также, после удалении объектов в конфигурации, при файловой выгрузке платформа по файлу ConfigDumpInfo.xml понимает, какие файлы нужно удалить в каталоге.
Внимание. Без файла ConfigDumpInfo.xml файлы удаленных метаданных при выгрузки конфигурации в xml не удаляются.
Для того, чтобы файл ConfigDumpInfo.xml в репозитории проекта не конфликтовал в ветками других разработчиков из-за configVersion, данный атрибут обнуляется с помощью режима скриптов new_configdumpinfo
.
configVersion="0000000000000000000000000000000000000000
Внимание. Необходимо убедиться, что в git precommit прописан режим
new_configdumpinfo
(см. Инициализация репозитория проекта)
Ускоренная выгрузка конфигурации в файлы
Для ускоренной выгрузки конфигурации в файлы необходимо перед началом разработки актуализировать bin/.1ccicd/ConfigDumpInfo.xml. Канонический процесс разработки с использованием режима актуализации ConfigDumpInfo.xml выглядит следующим образом:
- Перейти на ветку мастер.
- Создать новую ветку разработки по задаче разработки.
- Обновить ИБ разработки с помощью update_ib_patch в том случае, если у вас конфигурация находится на частичной поддержке, или с помощью update_ib_cf, если у вас конфигурация вообще снята с поддержки.
- Во время обновления ИБ будет получен файл bin/.1ccicd/ConfigDumpInfo.xml с последними версиями конфигурации.
- Также, актуализировать файл ConfigDumpInfo.xml с помощью режима get_ib_configdumpinfo.
- Зайти в конфигуратор, провести разработку.
- Получить файлы конфигурации с помощью команды get_ib_xml.
- Зафиксировать изменения.
- bin/.1ccicd/ConfigDumpInfo.xml обновится новыми версиями при выполнении команды get_ib_xml.
Внимание. Ускоренная выгрузка не будет работать, в случае удаления или переименования объектов метаданных.