1
0
mirror of https://github.com/agibalovsa/-1C_CICD.git synced 2025-10-06 05:36:58 +02:00
Agibalov Sergey 293bf28767 Исправлены ошибки:
- Ошибка обнуления конфигурации поставщика при обновлении ИБ через патч (в патче содержится пустая конфигурация поставщика).
2025-03-27 22:20:40 +04:00
2025-03-27 22:20:40 +04:00
2025-02-24 10:52:04 +04:00
2024-07-18 18:03:29 +04:00
2024-07-18 18:03:29 +04:00
2025-02-24 10:52:04 +04:00
2025-02-24 10:52:04 +04:00

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
    

Инициализация репозитория проекта

Для инициализации репозитории проекта для работы со скриптами необходимо выполнить несколько шагов:

  1. Выбрать место расположение скриптов, например, в каталоге scripts/1c_cicd. Скрипты можно как просто скопировать с родительского репозитория, так и расположить в качестве подмодуля репозитория git.

  2. Создать файл инициализации и расположить его в каталоге bin. Например, файл init.bat со следующим кодом

    executor ..\scripts\1c_cicd\main.sbsl init "..\\" 1
    
  3. Необходимо запустить команду инициализации, после чего создадутся следующие файлы

    1. Файл настроек проекта ./project_config.json

    2. Файл пользовательских настроек bin/project_user_prop.json

    3. Пакетные файлы для запуски скриптов в разных режимах bin/*

    4. На основе описанной структуры проекта создается файл .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 выглядит следующим образом:

  1. Перейти на ветку мастер.
  2. Создать новую ветку разработки по задаче разработки.
  3. Обновить ИБ разработки с помощью update_ib_patch в том случае, если у вас конфигурация находится на частичной поддержке, или с помощью update_ib_cf, если у вас конфигурация вообще снята с поддержки.
  4. Во время обновления ИБ будет получен файл bin/.1ccicd/ConfigDumpInfo.xml с последними версиями конфигурации.
  5. Также, актуализировать файл ConfigDumpInfo.xml с помощью режима get_ib_configdumpinfo.
  6. Зайти в конфигуратор, провести разработку.
  7. Получить файлы конфигурации с помощью команды get_ib_xml.
  8. Зафиксировать изменения.
  9. bin/.1ccicd/ConfigDumpInfo.xml обновится новыми версиями при выполнении команды get_ib_xml.

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

Description
Набор скриптов на 1С:Исполнителе для организации контуров разработки, тестирования, обновления
Readme 743 KiB
Languages
Markdown 100%