Отражаем хранилище в репозиторий git, Jenkins'ом. Опять 25

01.06.26

Разработка - DevOps и автоматизация разработки

Одна линия сборки для обработки нескольких конфигураций - выгрузка хранилищ в git, запуск анализа SonarQube.
Достаточно давно опубликовал статью на эту тему - Отражаем хранилище в репозиторий git, Jenkins'ом. Пришлось вернуться к этой теме - переосмыслить и переделать.

По мотивам статьи было реализовано ~10 линий сборки. Ну работали себе. Время от времени ломались из-за новых авторов в хранилище, чинились, работали дальше.

Но вот понадобилось добавить еще ~15 линий (отсюда "Опять 25":) и немного переделать текущие.
Начал заниматься всем этим. Но на 8-й линии уже психанул - ведь работа несложная, но кропотливая и однотипная (!). Поэтому озадачился и решил написать единую линию сборки, где все проекты были бы описаны в отдельном файле и хранились в репозитории - чтобы вообще в Jenkins не лазить. За пару вечеров допилил.

 

Предназначение

Пайплайн выгружает несколько хранилищ в git-репозитории и (опционально) запускает анализ кода sonar scanner'ом.

 
 Код пайплайна (jenkinsfile)

Ключевые возможности

  • Чтение общих и проектных настроек из JSON-файлов.
  • Фильтрация запускаемых проектов через параметр PROJECT_FILTER.
  • Группировка проектов для параллельной обработки. 
  • Опциональный таймаут для каждого проекта.
  • Безопасная работа с секретами (токен SonarQube, учетные данные Git).
  • Обработка ошибок: сбой одного проекта не останавливает весь пайплайн.
  • Использование библиотеки gitsync для переноса коммитов хранилища в Git-репозиторий.
  • Возможность задавать произвольные параметры для gitsync и sonar scanner через переменные окружения.

Большую роль играет то, что и gitsync, и sonar scanner могут параметризоваться переменными окружения. И поэтому любые такие настройки можно задать при описании общих и/или проектных настроек - эти настройки "транслируются" в переменные окружения.

 
 Пример общих настроек, с комментариями (common.json)

 

{
  # Метка Jenkins-агента, где будет происходить сборка
  "agentLabel": "sonar",
  # Настройки проектов "по умолчанию". 
  # Все ключи из default могут быть переопределены непосредственно в объекте проекта (на верхнем уровне).
  "props": {
    # Проект активен
    "active": true,
    # Кодовая страница для логов gitsync и sonar scanner 
    "codepage": "65001",
    # ID секрета, хранящего раздельно пользователя и пароль для подключения к git-репозиторию
    "gitCredentialsID": "git_token",
    # ID секрета, хранящего токен для подключения к SonarQube
    "sonarqubeTokenID": "sonarqube_token",
    # Каталог репозитория, где хранятся сами исходники
    "srcDir": "src", 
    # Запускать анализ SQ
    "useSonar": true,
    # Ветка репозитория исходников. Бывает и main, и master. Указываем, как нам нужно.
    "branch": "main",
    # Идентификатор группы проектов
    "group": 0,
    # Дополнительные параметры командной строки для gitsync
    "otherGitsyncParams": "",
    # Дополнительные параметры командной строки для sonar scanner
    "otherSonarScannerParams": "",
    # Очищать рабочий каталог перед запуском gitsync.
    "clearDir": true,
    # Можем ограничить таймаутом время сборки проекта
    "timeoutMinutes": 0
  },
  # Переменные окружения "по умолчанию"
  # Здесь и переменные gitsync, и sonar scanner.
  "env": {
    "V8VERSION": "8.3.22.2283",
    "GITSYNC_STORAGE_USER": "user_gitsync",
    "GITSYNC_DOMAIN_EMAIL": "domain.ru",
    "GITSYNC_EMAIL": "domain.ru",
    "GITSYNC_REMOTE_PUSH_N_COMMITS": "2",
    "GITSYNC_LIMIT": "0",
    "GITSYNC_REMOTE_PUSH_TAGS": "true",
    "GITSYNC_REMOTE_PUSH": "true",
    "GITSYNC_SKIP_EXISTS_TAGS": "true",
    "GITSYNC_TASK_PREFIX": "#",
    "SONAR_HOST_URL": "https://sonarqube:9443",
    "SONAR_SOURCE_ENCODING": "UTF-8",
    "SONAR_INCLUSIONS": "**\\*.bsl",
    "SONAR_SCANNER_JAVA_OPTS": "-Xmx2G",
    # Чтобы побороть ромбики в логах sonar scanner
    "JAVA_TOOL_OPTIONS": "-Dfile.encoding=UTF-8"
  }
}

* JSON не предусматривает комментарии - удалить.

 
 Пример настроек проектов, с комментариями (projects.json)

 

[
    {
        "props": {        
          # Задаем другую основную ветку
          "branch": "master"
        },
        "env": {
            # Это расширение
            "GITSYNC_EXTENSION": "РасширениеВнешниеКонтрагентыДоговоры",
            # Путь к хранилищу
            "GITSYNC_STORAGE_PATH": "//STORAGES-1C/Расширения/РасширениеВнешниеКонтрагентыДоговоры/",
            # URL git-репозитория
            "GITSYNC_REPO_URL": "https://STORAGES-GIT/docflow/ebd-external_data.git",
            # Ключ проекта SonarQube
            "SONAR_PROJECT_KEY": "ebd.external_data"
        }
    },
    {
        "props": {        
          # Выводим в отдельную группу
          "group": 1
        },
        "env": {
            "GITSYNC_STORAGE_PATH": "//STORAGES-1C/TechProjects/194_БП/",
            "GITSYNC_REPO_URL": "https://STORAGES-GIT/1c/prom/main_disconnects.git",
            "SONAR_PROJECT_KEY": "Prom_bp_disconnect",
            # Имя проекта SonarQube
            "SONAR_PROJECT_NAME": "Пром (БП Отключения)",
            # Дополнительные java-опции для sonar scanner
            "SONAR_SCANNER_JAVA_OPTS": "-Xmx8G -Xms2G -Dfile.encoding=UTF-8"
      }
    }
]

* JSON не предусматривает комментарии - удалить.

 

Примечания

  • Проектные настройки дополняют и "перекрывают" значения по умолчанию.
  • Конечный запуск cli-утилит выполняется с помощью powershell, т.к. bat как-то неустойчиво ведет себя, именно при использовании в скриптовом pipeline, - может на ровном месте зависнуть. А в freestyle-проектах такой проблемы не наблюдается.
  • Ключ проекта передается не через переменную окружения, дописан через "--define". У меня почему-то из переменной окружения sonar scanner не брал ключ. И через "-Dsonar.projectKey=" тоже не брал. А через "--define" взял.
  • Сначала выполняется параллельная сборка, затем выполняются последовательные сборки.
  • Ключ sonar-проекта (env.SONAR_PROJECT_KEY) нужно задавать, даже если анализ кода отключен. Используется для заголовка шага сборки.
  • Не проработана тема с credentials для доступа к хранилищу для gitsync. Может позже доделаю.
  • Немного озадачился безопасностью для параметров, которые могут быть дописаны в командную строку (см.метод sanitizeParams), чтобы избежать injections. Но тут тема более серьезная. Может и вообще нужно убрать эти доп.параметры командной строки.

 

Дополнительные возможности

Фильтр проектов

При запуске задания в Jenkins можно задать, какие проекты обрабатывать. Для этого нужно линию сборки сделать параметризованной, ввести параметр PROJECT_FILTER с значением по умолчанию "*".

Варианты фильтра:

  • * - все проекты, с учетом их активности
  • cf - обработка основных конфигураций, с учетом активности
  • cfe - обработка расширений
  • Ключи необходимых проектов, через пробел. Настройка активности не учитывается.

Таймауты

Можно задать таймаут (в минутах) для обработки проекта. Для отключения таймаута - указать 0 (ноль).

Группы проектов

Проекты можно группировать для параллельной обработки - задать значение для props.group. Группы проектов обрабатываются последовательно, согласно их значениям группировки.
В группе может быть и только один проект - таким приемом задается "монопольная" обработка проекта, без других параллельных.

Плагины

Требуются плагины Jenkins:

  • Pipeline Utility Steps (для `readJSON`, `readFile` и др.)
  • Git Plugin (для клонирования репозиториев)

 

Итоги

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

Обновления

01.06.26

Переделал настройки (общие и проектные) - ввел группировку свойств props, для упрощения пайплайн.
Переделал механизм параллельной обработки. Теперь это выполняется группами проектов (ранее использовалось parallel). 

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

Jenkins SonarQube gitsync

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)

Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.

50000 руб.

10.09.2026    14040    125    0    

87

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С 8.5 Бесплатно (free)

Выгрузка типовой Бухгалтерии в XML через базу занимает больше четырёх минут. Я написал движок, который читает файл конфигурации напрямую и выгружает его за 35 секунд, совпадая с выгрузкой платформы байт в байт во всех 90 385 файлах. Загрузка обратно тоже работает: круг через платформу совпадает полностью. Рассказываю, как ускоряли, как проверяем и что при загрузке XML теряет сама платформа. А в конце спрашиваю, нужно ли это кому-то, кроме меня, и на какой конфигурации проверить следующей.

27.10.2026    988    oyti    20    

16

Нейросети DevOps и автоматизация разработки Разработчик Руководитель проекта 1С 8.3 1С 8.5 Бесплатно (free)

Полтора месяца ИИ-агенты писали мне коммерческое расширение 1С. Я поднял журналы всех сессий и сложил по прайсу: $13 365, из них 94 % — за то, что агент заново перечитывает уже известное. Разбор счёта, три дыры, правила, которые вчетверо удешевили шаг, и скрипт, чтобы посчитать свой.

08.10.2026    2456    deda    29    

16

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Абонемент ($m)

Запуск MCP-сервера в Docker с --read-only, --cap-drop ALL, сетью none и внутренней сетью только до заглушки 1С. Что показали попытки соединения, записи на диск и чтения окружения, почему сервер падал на журнале и как это исправлено. Прогон на Docker 29.8.0 и mcp 2.2.0, в архиве Dockerfile и скрипт проверки.

1 стартмани

06.10.2026    853    Ninel_S    0    

8

Нейросети DevOps и автоматизация разработки Разработчик 1С 8.3 Бесплатно (free)

Подключаем Cursor к 1C: Platform Tools MCP на Windows: установка расширений, packagedef, IPC, токен и mcp.json. Восемь шагов со снимками экрана, проверка env_status, разбор MODULE_NOT_FOUND и конфликта портов. Исправляем ошибки предыдущей статьи и объясняем, как агент получает метаданные из XML. Стенд: Cursor 3.19.7, Platform Tools 0.9.6, MCP 0.3.0.

28.09.2026    6389    Ninel_S    2    

10

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Разработчик 1С 8.3 Абонемент ($m)

В корпоративных инсталляциях «1С:Предприятие 8.3» под управлением PostgreSQL всё чаще проявляются архитектурные пределы масштабирования: рост числа пользователей, обязательная маркировка, плотный поток API-интеграций и высокая стоимость простоя. Вводная часть цикла разбирает ключевые факторы современной эксплуатационной нагрузки и формирует инженерную методологию эволюционной модернизации без остановки продуктивного контура. Материал основан на практическом кейсе «Торговый контур» и показывает, как определить целевые метрики (p95, MTTR, APDEX), выстроить наблюдаемость, стабилизировать работу кластера и подготовить инфраструктуру к дальнейшему масштабированию. Публикация задаёт фундамент для последующих частей, посвящённых телеметрии, оптимизации PostgreSQL, CI/CD и архитектурному росту.

1 стартмани

10.09.2026    1566    Ninel_S    0    

6

DevOps и автоматизация разработки Тестирование QA Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Бесплатно (free)

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    12430    KatanaDragon511    30    

40

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

Представьте, что вас попросили «сделай нам DevOps для 1С». С чего начинать? Часто за этой потребностью скрывается хаос в самом процессе разработки. Поэтому начинать нужно не с инструментов, не с серверов и не со скриптов, а с понимания того, что именно необходимо изменить. Предлагаем небольшой спасительный чек-лист, по которому можно относительно безболезненно запустить современные процессы управления разработкой 1С, даже когда у команды нет ничего, а изменения они присылают друг другу почтой и в мессенджерах. Вы получите структурированный пошаговый список задач, с которым не страшно окунаться в любой проект аудита разработки на 1С с целью навести там порядок.

31.08.2026    3881    Evil Beaver    3    

13
Для отправки сообщения требуется регистрация/авторизация