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

См. также

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

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

03.06.2025    656    PetrovAnton    3    

3

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

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

21.05.2025    1876    ICL-Soft    3    

17

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

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

08.04.2025    3266    bayselonarrend    27    

49

Внешние источники данных OneScript Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

20.02.2025    4451    bayselonarrend    25    

46

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

Внедряем проверку новых версий прямо в расширение. Оповещайте о новых версиях и показывайте пользователям список изменений. Для разработчиков, которые хотят сэкономить время и повысить лояльность клиентов!

05.02.2025    3899    Nonik    10    

18

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

Графический интерфейс с применением веб-технологий в коллекцию инструментария сценарного языка OneScript. Библиотека создает десктопное приложение имеющее декларативный пользовательский интерфейс (GUI), построенный веб-браузером. Возможности веб-технологий по представлению информации огромны. Эти возможности соответственно добавляются и к сценариям OneScript.

23.01.2025    1025    0    ahyahy    15    

10

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

Вместе создадим библиотеку на Oscript с нуля, шаг за шагом: от базовой структуры проекта до перевода на ОСень. Разберем структуру проекта, работу с файлом конфигурации, логирование, уведомления, консольный интерфейс и многое другое. Освоим весь цикл разработки и сделаем первый шаг к созданию собственных инструментов на Oscript!

13.01.2025    3395    leobrn    16    

59
Оставьте свое сообщение