OneScript + EDT + GIT

11.06.25

Разработка - Групповая разработка (Git, хранилище)

В данной публикации рассматривается пример реализации скрипта, который автоматизирует получение ветки из GIT репозитория и обновление конфигурации, если разработка проекта ведется в EDT.

Возникла у нас потребность в обновлении тестовой среды из определенной ветки в удаленном GIT репозитории. Выбор пал на OneScript, так как богатая библиотека и много уже сделано сообществом. Основная проблема заключалась в том что проект ведется в EDT и соответственно в GIT все файлы лежат в формате EDT.

В этой публикации я не буду рассказывать, как установить OneScript и подключать библиотеки, об этом есть отдельные публикации (OneScript).

Первым делом определяем json файл c настройками, чтобы не указывать их в коде. Подробно останавливаться не буду, в файле в комментариях к ключам есть вся информация. Если не нужно отправлять информацию в telegram, то в блоке telegram.toSend ставим false, также с блоком youtrack.use

{"repositoryName": имя удаленного репозитория, на компьютере,с которого запускается скрипт должен быть установлен git bash, при первом запуске будет предложена аутентификация
"reositoryLocalName": путь к локальному репозиторию ,
    "base": { // структура базы 1с, в которую будут загружены файлы
        "v8Version": "8.3.17", // версия платформы, под которой будет выполнен запуск 1с
         "Srvr": сервер на котором лежит база 1с, если база файловая то пустая строка
         "name": Имя базы на сервере, если база файловая то полный путь к базе
         "isFileBase": true или false, определяет файловая база или нет
         "potr": порт для подклчения к базе, если не стандартный используется на сервере 1с
         "login": "", логин к базе
         "pass": "", пароль к базе
         "keyPermissions": "123" ключ разрешения доступа
         "echengeDir": "каталог, куда будет выгружен cf, если не указан, то cf выгружен не будет",
         "cfName": "имя cf файла"
    },
    "edt":{ // структура для подключения к EDT,
        "edtVersion": "edt@2023.2.0:x86_64", Версия EDT которая будет запущена для выгрузки файлов, доступные версии можно узнать выполнив команду ring help
        "project": "", полный путь к проекту EDT
        "brancheName": "", имя ветки, которая будет получена в удаленном репозитории
        "configurationFiles": "", путь к папке, куда будут выгружены файлы конфигурации
        "workspaceLocation": "", рабочее пространство EDT, указывается при создании проекта. Расположение рабочей области указано в параметре: Окно > Параметры > Общие > Рабочая область > Отображать полный путь к рабочей области. Этот путь можно выделить и скопировать в буфер обмена.
        "edtLocation": "",
        "fileCommitHistory": "", текстовый файл, куда будет записана история коммитов
        "periodCommins": период коммитоа в часах, за сколько последних часов получить историю коммитор
    },
    "telegram":{
        "toSend": false или true, определяет отправлять историю комитов в телегу или нет
        "token": "", токен для телеги
        "server": "", сервер где лежит webhook
        "webhook": "", сам webhook
        "port": 443,
        "timeOut": 100,
        "Recipients":[ получатели сообщения
            {
                "id": "",
                "message_thread_id":
            }
        ]
    }
    "youtrack":{
        "use": true или false, определяет переносить задачи или нет
        "server": "", Сервер youtrack
        "token": "", Токен youtrack, создается в настройках youtrack
        "projectNames":[ Массив Имен проектов, которые нужно анализировать
            {"shortName":"ИД проекта","name":"Имя проекта"},
        ],
        "stageBefore":Имя стадии до переноса
        "stageAfter": Имя стадии после переноса
    }

 

Далее работам с OneScript.

Импортируем библиотеку для работы с JSON и читаем настройки из файла

#Использовать "lib/json"

Перем СтруктураПараметровБазы; // Структура параметров подключения к конфигурации 1с, заполняется из файла настроек base
Перем СтруктураПараметровЕДТ; // Структура параметров подключения к EDT, заполняется из файла настроек edt;
Перем СтруктураПараметровТелеграм; // Структура параметров телеграм, заполняется из файла настроек telegram
Перем НастройкиИзJson; // Все настройки из файла config.json
Процедура ОпределитьНастройки()
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Прочитать("config.json", "UTF-8");
	Строка = ТекстовыйДокумент.ПолучитьТекст();
	json = Новый ПарсерJson;
	НастройкиИзJson = json.ПрочитатьJSON(Строка, , , Истина);
	
	СтруктураПараметровБазы = НастройкиИзJson.base;
	СтруктураПараметровЕДТ = НастройкиИзJson.edt;
	
	СтруктураПараметровТелеграм = НастройкиИзJson.telegram;
КонецПроцедуры

Импортируем библиотеку gitrunner и загружаем нужную ветку в удаленном репозитории в локальный

Функция ПолучитьИзУдаленногоРепозитория(СтруктураПараметровЕДТ, НастройкиИзJson) Экспорт
	
	НоваяВетка = СтруктураПараметровЕДТ.brancheName + "_" + Формат(ТекущаяДата(), "ДФ=гггг_ММ_дд_ЧЧ_мм");
	ГитРепозиторий = Новый ГитРепозиторий();
	
	ЛокальныйКаталогРепозитория = НастройкиИзJson.reositoryLocalName;
	ЛокальныйКаталогРепозитория = СтрЗаменить(ЛокальныйКаталогРепозитория, "/", "\");
	
	ИмяРепозитория = НастройкиИзJson.repositoryName;
	
	ГитРепозиторий.УстановитьРабочийКаталог(ЛокальныйКаталогРепозитория);
	ГитРепозиторий.Получить(ИмяРепозитория, СтруктураПараметровЕДТ.brancheName);
	Сообщить("Получили ветку " + СтруктураПараметровЕДТ.brancheName + " из удаленного репозитория");
	ГитРепозиторий.СоздатьВетку(НоваяВетка);
	Сообщить("Создали ветку " + НоваяВетка + " в локальном репозитории");
	
	ГитРепозиторий.ПерейтиВВетку(НоваяВетка);
	Успешно = Истина;
	ВыгрузитьВФайлыИзЕДТ(СтруктураПараметровЕДТ, Успешно);
	
	СтруктураГитРепозитория = Новый Структура();
	СтруктураГитРепозитория.Вставить("ГитРепозиторий", ГитРепозиторий);
	СтруктураГитРепозитория.Вставить("Ветка", СтруктураПараметровЕДТ.brancheName);
	СтруктураГитРепозитория.Вставить("НоваяВетка", НоваяВетка);
	СтруктураГитРепозитория.Вставить("УспешноВыгрузилиФайлы", Успешно);
	
	Возврат СтруктураГитРепозитория;
	
КонецФункции

Теперь нужная ветка с нужными коммитами лежит в локальном репозитории, проблема в том, что эти файлы в формате EDT, и напрямую загрузить их в конфигурацию 1С не получится, нужно сконвертировать. Для этого используем интерфейс командной строки EDT, подробнее можно почитать тут EDT. Предварительно импортируем библиотеку 1commands

Процедура ВыгрузитьВФайлыИзЕДТ(СтруктураПараметровЕДТ, Успешно)
	Кавычка = 34;
	КаталогВыгрузки = СтрЗаменить(СтруктураПараметровЕДТ.configurationFiles, "/", "\");
	
	ОбщегоНазначения.УдалитьФайлыИзКаталога(КаталогВыгрузки);
	КаталогВыгрузки = Символ(Кавычка) + КаталогВыгрузки + Символ(Кавычка);
	РабочаяОбласть = Символ(Кавычка) + СтрЗаменить(СтруктураПараметровЕДТ.workspaceLocation, "/", "\") + Символ(Кавычка);
	КаталогЕдт = Символ(Кавычка) + СтрЗаменить(СтруктураПараметровЕДТ.edtLocation, "/", "\") + Символ(Кавычка);
	ПроектаЕдт = Символ(Кавычка) + СтрЗаменить(СтруктураПараметровЕДТ.project, "/", "\") + Символ(Кавычка);
	
	ТекстКоманднойСтроки = "ring ВерсияЕдт ";
	ТекстКоманднойСтроки = ТекстКоманднойСтроки + "workspace export --project ПроектаЕдт ";
	ТекстКоманднойСтроки = ТекстКоманднойСтроки + "--configuration-files КаталогВыгрузки ";
	ТекстКоманднойСтроки = ТекстКоманднойСтроки + "--workspace-location РабочаяОбласть";
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "ВерсияЕдт", СтруктураПараметровЕДТ.edtVersion);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "ПроектаЕдт", ПроектаЕдт);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "КаталогВыгрузки", КаталогВыгрузки);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "РабочаяОбласть", РабочаяОбласть);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "КаталогЕдт", КаталогЕдт);
	Команда = Новый Команда;
	Команда.УстановитьСтрокуЗапуска(ТекстКоманднойСтроки);
	
	ответВыгрузки = Команда.Исполнить();
	
	Если ответВыгрузки = 0 Тогда
		Сообщить("Выгрузили файлы кофигурации");

	Иначе
		Успешно = Ложь;
	КонецЕсли;
	
	
	
КонецПроцедуры

Теперь у нас все файлы в нужном формате. Осталось загрузить все в нужную конфигурацию. Импортируем библиотеку v8runner

Процедура ЗагрузитьКонфигурациюИзФайлов(СтруктураПараметровЕДТ, СтруктураПараметровБазы) Экспорт
	КаталогВыгрузки = СтрЗаменить(СтруктураПараметровЕДТ.configurationFiles, "/", "\");
	Конфигуратор = Новый УправлениеКонфигуратором();
	УстановитьКонтекст(Конфигуратор, СтруктураПараметровБазы);
	Конфигуратор.ЗагрузитьКонфигурациюИзФайлов(КаталогВыгрузки);
	ОбщегоНазначения.УдалитьФайлыИзКаталога(КаталогВыгрузки);
	
	Сообщить("Загрузили файлы кофигурации");
	Конфигуратор.ОбновитьКонфигурациюБазыДанных(Ложь, Истина);
	Сообщить("Обновили конфигурацию базы данных");
	
	Сообщить("Выполняем проверки конфигурации");
	ПроверитьКонфигурацию(Конфигуратор);
	Сообщить("Выгружаем конфигурацию в файл");
	ВыгрузитьКонфигурацию(Конфигуратор, СтруктураПараметровБазы);
	
КонецПроцедуры

 

Все готово, конфигурация загружена из удаленной ветки.

Вступайте в нашу телеграмм-группу Инфостарт

#1С #EDT #git #Open Source

См. также

Групповая разработка (Git, хранилище) Программист Бесплатно (free)

Разберем, как организовать работу с GIT, не покидая конфигуратор, и зачем может понадобиться автономный сервер. Вы узнаете о скриптах, которые автоматизируют взаимодействие с GIT прямо из 1С, а также о методах сборки / разборки обработок и расширений «на лету», которые значительно ускоряют процесс разработки и совместной работы.

22.07.2025    3545    ktb    17    

30

Групповая разработка (Git, хранилище) Системный администратор Программист Бесплатно (free)

Все больше команд начинают использовать при разработке 1С GIT. На самом деле производительность GIT так же ограничена и зависима от различных настроек и подходов, как и всеми нами любимая платформа 1С. Для комфортной работы с GIT в случае больших репозиториев необходимо выполнять оптимизацию алгоритмов взаимодействия. Опишу свой опыт. 

14.07.2025    883    bborisko    0    

8

DevOps и автоматизация разработки EDT Программист Бесплатно (free)

Цель статьи – показать, что DevOps можно внедрять в проектах любого масштаба, даже с ограниченными ресурсами. Автор делится личным опытом: рассказывает, как начиналось внедрение, какие ресурсы потребовались, какие задачи удалось решить и как организован текущий рабочий процесс. Вы узнаете, как DevOps-практики помогают участникам разработки и чем DevOps-инженеры полезны для всех, кто участвует в создании решений. В статье подробно разбираются преимущества, которые дал переход на EDT, его влияние на процессы сборки, а также анализируется опыт внедрения Kubernetes – что это уже принесло и что принесет в будущем.

11.07.2025    968    ptica    0    

6

OneScript Программист 1С v8.3 Бесплатно (free)

В 2024 году главному инструменту DevOps в 1С исполнилось 10 лет. Расскажем о том, что представляет собой экосистема 1Script в 2024 году и почему её важно включить в свой рабочий процесс.

16.06.2025    5772    Evil Beaver    43    

58

EDT Программист Бесплатно (free)

Статья поможет разработчикам 1С правильно настроить масштабирование интерфейса EDT для комфортной работы на мониторах с высоким разрешением.

03.06.2025    1532    PetrovAnton    5    

6

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) EDT Программист 1С v8.3 Бесплатно (free)

В процессе использования 1С:EDT и репозитория Git для обновлений релизов доработанных конфигураций появилась необходимость в регулярной загрузке конфигураций от вендора 1С в Git-репозиторий. Описанное в статье решение позволяет автоматизировать эту операцию и может быть полезным специалистам, занимающимися обновлениями с использованием 1C:EDT+Git

21.05.2025    3375    vladimir_iclsoft    3    

20

WEB-интеграция OneScript Программист Стажер Бесплатно (free)

Библиотека для работы с базами MySQL на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

08.04.2025    4203    bayselonarrend    27    

49
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kalyaka 1136 16.06.25 09:11 Сейчас в теме
Все готово, конфигурация загружена из удаленной ветки.
А эта конфигурация будет синхронизирована с проектом? Или цель была только в получении базы данных с загруженной конфигурацией без разработки в EDT?
2. AlexF1 47 16.06.25 09:50 Сейчас в теме
(1) Цель создать в проекте локальную ветку на основании релизной ветки в удаленном репозитории. Затем уже проект выгружается в файлы xml, которые загружаются в некую темповую конфигурацию, из которой уже получается готовый cf, этим cf уже обновляется продуктовая конфигурация. Темповая конфигурация с проектом не синхронизируется.
3. kalyaka 1136 16.06.25 12:50 Сейчас в теме
(2) понятно, это делается для целей встраивания в DevOps
4. unichkin 1609 01.07.25 19:36 Сейчас в теме
В EDT от ring отказались в конце прошлого года, ссылка в статье ведет на описание 1C:EDT
https://its.1c.ru/db/edtdoc#content:10608:hdoc

+ Кстати в onescript для ринга есть ringos, правда уже неактуально)
Оставьте свое сообщение