Практика применения DevOps. Автоматизированная сборочная линия

16.12.20

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

В четвертой части мастер-класса «Практика применения DevOps» на конференции Infostart Event 2019 Inception выступил Валерий Пронин. Он рассказал, как развернуть автоматизированную сборочную линию, которая будет контролировать качество кода в проекте и в зависимости от прохождения порога отдавать релиз в виде cf-файла либо отправлять письмо об ошибках.

Продолжаем цикл статей по практике применения DevOps.

В первой части Павел Олейников рассказал про процессы DevOps, инструменты, используемые для каждого из них, и про работу с Git.

Во второй части Виталий Подымников показал, как настраивать SonarQube для проверки качества кода.

В третьей части Светлана Попова рассмотрела работу двух инструментов тестирования – Vanessa Automation в связке с СППР и Сценарное тестирование.

А мы с вами соберем автоматизированную сборочную линию.

 

Параметры виртуальных машин для master и slave-нод

 

 

Давайте рассмотрим параметры виртуальных машин, которые мы будем использовать. Это два сервера – Ubuntu (он будет мастером) и Windows (он будет ведомым – слейвом):

  • на сервере Ubuntu установим Jenkins и GitLab.
  • на сервере Windows у нас уже установлены 1С, SonarQube, OneScript, EDT и Git, а также Java – в рамках мастер-класса мы их установку рассматривать не будем.

 

 

При конфигурировании виртуальной машины для Ubuntu нужно учитывать требования к оборудованию, предъявляемые программным обеспечением Jenkins и GitLab:

  • Jenkins требует 1 Гб и более памяти и 50Гб и более свободного места на диске.
  • А для GitLab – это 2 ядра и 8Гб.

Информация взята из официальных источников – jenkins.io и gitlab.com.

 

Установка программного обеспечения на сервере Windows

 

 

А на сервере Windows должно быть установлено следующее программное обеспечение:

  • обязательно нужен OneScript;
  • большинство действий по работе с 1С мы будем выполнять с помощью vrunner, поэтому его тоже нужно установить (также для работы vrunner требуется установить пакет vanessa-add):
    opm install add
    opm install vanessa-runner
  • Vanessa Automation;
  • платформа 1С, включая Rac и Ras;
  • EDT 14;
  • JDK 11 версии;
  • Git;
  • SonarQube и Sonar-scanner.

 

 

После установки программного обеспечения рекомендую проверить наличие путей в переменных среды:

  • в JAVA_HOME должен быть прописан путь к JRE;

  • а в PATH должны быть установлены пути для JDK, OneScript, Git.

 

 

Также в PATH должны быть прописаны пути к утилите ring для EDT.

 

Установка программного обеспечения на сервер Ubuntu

 

 

Кратко рассмотрим установку программного обеспечения на сервере Ubuntu. Поскольку это довольно длительный процесс, мы просто рассмотрим команды.

 

Ubuntu: Установка Java

Для работы Jenkins на сервере Ubuntu нужно будет поставить Java. Это можно сделать с помощью команды:

sudo apt-get install default-jdk

Результат установки можно проверить с помощью команды

java --version

 

Ubuntu: Установка Git

Чтобы Jenkins мог работать с исходниками репозиториев необходимо установить на Ubuntu Git. Это можно сделать с помощью команды

sudo apt install git

 

Ubuntu: Установка GitLab

 

 

Далее устанавливаем Gitlab.

Для его скачивания у нас должен быть установлен curl командой:

sudo apt-get install curl

Также нужно сделать настройку postfix, чтобы можно было отправлять уведомления по почте. Для этого выполним команду:

sudo apt-get install curl ca-certificates postfix

При установке выберем тип «Без настройки» – в этом случае мы можем настроить почтовый сервер позже.

 

 

Потом скачиваем GitLab по ссылке из репозитория:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

И запускаем непосредственно установку, указав адрес будущего сайта – мы разворачиваем GitLab в локальной сети по IP 192.168.223.128:

sudo EXTERNAL_URL="http://192.168.223.128" apt install gitlab-ee

И чтобы запустить GitLab применяем команду:

sudo gitlab-ctl reconfigure

После этого по адресу 192.168.223.128:8080 (8080 – порт по умолчанию) запустится GitLab:

  • при первом запуске задаем пароль пользователя root;
  • через административную панель добавляем пользователей и проект.

 

Ubuntu: Установка Jenkins

 

 

Для установки Jenkins мы будем использовать команды, которые представлены на официальном сайте Jenkins:

wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -

sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

sudo apt-get update

sudo apt-get install jenkins

После установки нужно изменить порт, на котором будет работать Jenkins, потому что GitLab у нас установлен на этом же сервере, и использует тот же порт 8080, поэтому Jenkins мы поставим на порт 8081. Для этого нужно вызвать на редактирование файл, где указаны значения по умолчанию, выполнив команду:

sudo nano /etc/default/jenkins

в файле прописать

HTTP_PORT=8081

и после этого нужно перезапустить Jenkins командой:

sudo service jenkins restart

 

 

Проверить статус Jenkins можно командой:

systemctl status jenkins

Если все хорошо, мы увидим сообщение о том, что Jenkins активен (такое же, как на скриншоте).

 

 

После установки Jenkins мы можем уже перейти на URL 192.168.223.128 по порту 8081, который мы указали. При входе Jenkins попросит ввести пароль администратора.

Пароль администратора, сгенерированный при установке, хранится в каталоге /var/lib/Jenkins/secrets. Посмотреть пароль, который предлагает Jenkins, можно командой:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

 

 

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

 

 

Происходит установка плагинов Jenkins.

 

 

При первом входе нужно будет создать пользователя-администратора, задать его логин и пароль.

 

 

И прописать URL для Jenkins.

 

 

После этого, в принципе, половина этапа пройдена – считаем, что GitLab и Jenkins у нас установлены.

 

Интерфейс Jenkins

 

 

Пройдемся по основным пунктам меню и разделам Jenkins.

Самый верхний пункт «Создать Item» – это создание сборок или задач.

 

 

Здесь можно будет уже создать задачу со свободной конфигурацией, а также пайплайн.

 

Настройка Jenkins

Далее – раздел «Настроить Jenkins».

 

 

Здесь первое, что нам нужно сделать – это настроить глобальные настройки безопасности. В группе Agents мы можем указать порт, по которому наши агенты будут подключаться к узлу master (по умолчанию заблокирован). Мы можем выбрать статичный или случайный. Укажем статичный порт 41000. Статичный порт удобно использовать, когда настроен файрвол – в самом файрволе вам нужно будет указать добавить в исключения порт и настроить права, чтобы агенты могли подключаться.

 

Установка и настройка плагинов

В разделе «Управление плагинами» нужно дополнительно установить плагины:

После того, как мы их установим, их нужно настроить.

 

 

Плагин Allure настраивается в разделе «Конфигурация глобальных инструментов» – здесь нам важно задать командную строку вызова allure.

 

 

И в разделе «Конфигурация глобальных инструментов» задать настройки вызова SonarQube Scanner.

 

 

А в разделе «Конфигурация системы» нужно указать URL сервера SonarQube.

 

Добавление узла

Теперь нам нужно добавить в Jenkins наш slave-узел. Этот шаг нужно делать, соединяясь с Jenkins по сетевому URL на машине, где находится наша ведомая Windows-система – там, где будет производиться непосредственное тестирование.

Для подключения агентов и создания новых узлов в настройках Jenkins есть раздел «Управление средами сборки».

 

 

Здесь мы создадим новый узел, поставим переключатель «Permanent Agent» и в окне со вводом параметров зададим:

  • Количество процессов-исполнителей – установим равным 2. Это количество процессов/задач, которое может одновременно выполняться на данном узле.

  • Корень удаленной файловой системы – у нас это будет C:\H. Это тот каталог на узле, в котором Jenkins будет создавать свои временные файлы (если этого каталога у нас на Windows-системе нет, его нужно создать).

  • Способ запуска – Launch agent by connecting it to the master

Нажмем «Сохранить». В списке узлов появится только что созданный узел, на котором будет выведен красный крестик, который говорит о том, что узел в текущий момент недоступен.

 

 

Откроем его настройки из браузера на машине, где находится наша ведомая Windows-система.

Проверим, какие способы запуска можно использовать:

  • Первый способ запуска – это запуск Java-апплета, открываемого из браузера.

  • Второй способ запуска – это запуск из командной строки.

Воспользуемся вторым способом. Для этого нам необходимо скачать файл agent.jar по выделенной гиперссылке и сохранить его в папку C:\H.

Далее – скопируем текст предложенной команды.

 


Для этого в папке C:\H создадим файл run.bat и вставим в него скопированную команду.

Чтобы команда работала в кодировке UTF8, в начало нужно добавить:

chcp 65001

Также нам нужно будет указать, что сама Java должна работать в кодировке UTF-8 (чтобы при выполнении задачи в самом Jenkins не было нераспознанных символов), поэтому в строку нужно добавить параметр:

-Dfile.encoding=UTF8

Запустим этот батник.

 

 

Если подключение прошло успешно, будет выведено состояние Connected.

 

 

После этого мы видим, что на узле красного крестика уже нет, компьютер подключен.

 

Настройка Pipeline

 

 

Давайте теперь создадим пайплайн.

 

 

Назовем его conf, нажмем ОК.

 

 

Здесь довольно большое количество настроек, мы будем использовать только определенные.

Например, нужно настроить параметр «Удалять устаревшие сборки» – мы в Jenkins будем хранить только результаты пяти последних сборок.

 

 

Также нам нужен будет флаг «Prepare an environment for the run» (подготовить переменные к сборке). Здесь в поле «Properties Content» мы можем задать значения переменных, к которым в дальнейшем будем обращаться из пайплайна, в виде соответствия имени переменной и названия. Я вставлю сюда следующий текст:

Server=infostart_fs
BaseName=infostart_conference_develop
RasPort=1545
Uccode=123

Это – четыре переменные, которые мы будем использовать в пайплайне:

  • Server – сервер MS SQL, на котором у нас развернута база;
  • BaseName – имя базы, к которой мы будем подключаться;
  • RasPort – порт сервера Ras;
  • Uccode – код блокировки.

 

 

Далее в разделе Pipeline указываем настройки:

  • Pipeline script from SCM – это значит, что мы будем брать пайплайн скрипт из SCM-репозитория.
  • SCM – указываем Git.
  • Repository URL – указываем адрес репозитория на GitLab.
  • Credentials – укажем сохраненные настройки с доступом к репозиторию.
  • Выберем конкретную ветку – vpronin.
  • Script Path – укажем demo/jenkinsfile (путь в репозитории к Jenkinsfile), в этой сборочной линии мы будем использовать не основной дженкинсфайл, а демонстрационный, который сейчас сами напишем.
  • в поле Additional Behaviors добавим шаг поведения Clean before checkout (очистить перед сборкой, чтобы не было лишних файлов), этого будет достаточно.

Нажимаем Применить.

 

 

Попробуем собрать наш пайплайн командой «Собрать сейчас». Внизу видно, что пошла сборка – мы можем перейти по гиперссылке и посмотреть, в каком она состоянии сейчас.

 

 

Откроем вывод консоли (Console Output). Здесь видно, что к репозиторию он подключился и сборочную линию уже увидел, но из-за ошибки в дженкинсфайле сборка завершилась с ошибкой.

 

Структура репозитория проекта и файла jenkinsfile

 

 

Перейдем в каталог репозитория Conference с помощью Visual Studio Code и рассмотрим его структуру.

На слайде показаны самые важные элементы каталога проекта – это:

  • папка EDT с исходниками конфигурации;
  • папка features с тестами;
  • папка tools, которая содержит скрипты автоматизации, которые мы будем использовать;
  • и файл jenkinsfile, где находится основная сборочная линия.

Я добавил в репозиторий папку demo и положил в нее пример простого пайплайна, чтобы показать вам, как строится сборочная линия в общем виде.

 

 

Рассмотрим структуру файла jenkinsfile:

  • пайплайн начинается с ключевого слова pipeline;
  • далее идет agent – указывается, на каких агентах будет осуществляться сборка;
  • потом раздел environment – это объявление переменных;
  • затем раздел post – действия после завершения сборки:
    • в разделе always указываются действия, которые будут выполняться всегда;
    • в разделе failure – действия, которые будут выполняться при ошибочной сборке;
    • и в разделе success – действия, которые будут выполняться при удачной сборке;
  • шаги располагаются в разделе stages:
    • каждый отдельный шаг располагается в разделе stage;
    • а сами действия в ветке steps.

 

Этапы сборки

 

 

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

 

Шаг №1. Подготовка среды

 

 

Первый шаг у нас – это подготовка среды. Этот шаг нужен, чтобы создать в папке out каталоги, которые мы в дальнейшем будем использовать.

stage ("Подготовка Среды") {
    steps {
        timestamps {
            cmd("IF NOT EXIST ${WORKSPACE}\\out md ${WORKSPACE}\\out")
            cmd("IF NOT EXIST ${WORKSPACE}\\out\\junit md ${WORKSPACE}\\out\\junit")
            cmd("IF NOT EXIST ${WORKSPACE}\\out\\workspace md ${WORKSPACE}\\out\\workspace")
            cmd("IF NOT EXIST ${WORKSPACE}\\out\\conf md ${WORKSPACE}\\out\\conf")
            cmd("IF NOT EXIST ${WORKSPACE}\\out\\cf md ${WORKSPACE}\\out\\cf")
        }
    }
}

Здесь выполняются команды проверки наличия в рабочем каталоге папок:

  • out – если ее нет, она будет создана;
  • out\cf, где будет сохраняться файл конфигурации;
  • out\conf, куда из формата EDT исходники будут конвертироваться в формат конфигуратора;
  • out\workspace, который соответствует каталогу воркспейса EDT для утилиты ring;
  • и out\junit.

Обратите внимание, что функцию cmd мы вынесли отдельно, чтобы удобнее переключать кодировку, потому что разная кодировка в командных строках – это очень частая проблема.

def cmd(command) {
    bat "chcp 65001\n ${command}"
}

Не забудем исправить ошибку, из-за которой сборка упала в прошлый раз. Сохраним, закоммитим и отправим в репозиторий.

Откроем Jenkins и попробуем собрать.

 

 

Пошла наша сборка. В консоли выводится, что клиент пайплайна получает из репозитория все изменения, получает Jenkinsfile и запускает его.

 

 

И дальше описывается выполнение этого Jenkinsfile - он создал в папке С:\H все необходимые временные каталоги.

 

Шаг №2. Сборка cf-файла конфигурации

 

 

Давайте перейдем к следующему шагу. На следующем шаге у нас будет подготовка исходников.

stage ("Подготовка исходников") {
    steps {
        timestamps {
            cmd("ring edt@1.14.0:x86_64 workspace export --project ${WORKSPACE}\\EDT --configuration-files ${WORKSPACE}\\out\\conf --workspace-location ${WORKSPACE}\\out\\workspace")
            cmd("vrunner compile --src ${WORKSPACE}/out/conf --out ${WORKSPACE}/out/cf/1Cv8.cf")
        }
    }
}
  • Подготовку исходников мы будем осуществлять с помощью команды ring. Как конвертировать проект из файлового представления 1C:EDT в xml-выгрузку конфигурации, описано на ИТС.
  • И далее мы из xml-выгрузки будем собирать cf-файл (файл конфигурации) с помощью vrunner. Если все пройдет без ошибок, после этой команды в рабочей директории в папке out/cf мы увидим файл конфигурации.

Давайте закоммитим изменения, отправим их в репозиторий и перезапустим нашу сборку.

 

 

У нас запустился процесс выгрузки файлов. После того как EDT закончила выгрузку файлов, дальше vrunner собирает конфигурацию из исходников. Операция завершилась успешно.

 

Шаг №3. Обновление существующей базы

 

 

Следующий шаг – это загрузка конфигурации в информационную базу. Для этого мы тоже будем использовать vrunner.

stage ('Загрузка конфигурации в базу') {
    steps {
        timestamps {
            cmd("vrunner load --src ${WORKSPACE}/out/cf/1Cv8.cf --ibconnection ${baseConnection}")
        }
    }
}

Обратите внимание, что в этой команде используется параметр baseConnection (строка подключение к базе). Этот параметр мы опишем в разделе environment.

baseConnection = "/S${env.Server}\\${env.BaseName}"

Для его установки мы обращаемся к переменным, которые указывали в настройках pipeline (в поле Properties Content).

Сохраним, отправим. Пока что проверять не будем, потому что это долгий процесс – закончим все остальное.

 

Шаг №4. Блокировка пользователей и принятие изменений

 

 

Следующий шаг – это принятие изменений. После того, как конфигурация в информационную базу загружена, мы должны принять изменения.

stage ('Принятие изменений') {
    steps {
        timestamps {
            cmd("vrunner session lock ${rasConnectionString}")
            cmd("vrunner session kill ${rasConnectionString}")
            cmd("vrunner updatedb --ibconnection ${baseConnection} ${uccodeString}")
            cmd("vrunner session unlock ${rasConnectionString}")
        }
    }
}

Данный раздел состоит из нескольких команд vrunner.

  • Первая команда – это session lock, т.е. мы заблокируем работу пользователей.
  • Потом мы завершим работу пользователей командой session kill
  • Далее – выполним команду updatedb с указанием параметров подключения к базе данных и кода блокировки.
  • И в дальнейшем мы разблокируем базу данных для дальнейшей работы.
uccodeString        = "--uccode ${env.Uccode}"
rasConnectionString = "--ras ${env.Server}:${env.RasPort} --dn ${env.BaseName} ${uccodeString}"

Здесь нам в разделе environment нужно задать значения параметров uccodeString и rasConnectionString.

Значения переменных Uccode, Server и RasPort для этих параметров мы указывали ранее в шаге настройки пайплайна.

Тоже сохраним и отправим этот шаг.

 

Шаг №5. Синтаксический контроль

 

 

Следующий шаг – синтаксическая проверка.

stage ('Синтаксическая проверка') {
    steps {
        timestamps {
            cmd("vrunner syntax-check --junitpath ./out/junit/syntaxCheck.xml --ibconnection ${baseConnection}")
        }
    }
}

Синтаксическую проверку мы тоже будем выполнять с помощью vrunner командой syntax-check:

  • с помощью параметра --junitpath мы указываем, куда положим xml-файлик с результатом проверки;
  • и с помощью параметра --ibconnection нам нужно указать настройки подключения к базе.

 

Шаг №6. Тестирование функциональности

 

 

Далее у нас будет шаг «Тестирование функциональности».

stage ('Тестирование функциональности') {
    steps {
        timestamps {
            cmd("vrunner vanessa --settings ./tools/json/VanessaRunner.json --ibconnection ${baseConnection}")
        }
    }
}

Тестирование функциональности мы будем запускать с помощью vrunner, который будет непосредственно запускать уже Vanessa Automation.

Запускать мы будем с помощью --settings с указанием настроек запуска Vanessa Automation, которые у нас хранятся в файле tools/json/VanessaRunner.json.

 

 

Давайте посмотрим структуру этого файла. Здесь очень много настроек, но нас интересуют параметры:

  • ВыполнитьСценарии – должно быть Истина.
  • КаталогФич – это наш каталог, где у нас будут лежать фичи.
  • КаталогВыгрузкиJUnit
  • КаталогВыгрузкиAllureБазовый
  • ЗакрыватьTestClientПослеЗапускаСценариев
  • И параметры подключения к клиенту тестирования

Более подробное описание настроек вы можете посмотреть в примерах из репозитория Vanessa Automation.

 

Шаг №7. Формирование отчетов Allure, SonarQube

 

 

И последний шаг – это у нас Sonar.

stage ('Sonar') {
    steps {
        script {
            scannerHome = tool "sonar-scanner"
        }
        withSonarQubeEnv("Sonar"){
            cmd("${scannerHome}\\bin\\sonar-scanner")
        }
    }
}

Здесь нам нужно описать переменную scannerHome:

def scannerHome

 

Шаг №8. Настройка шагов и артефакты сборки .cf

 

 

Давайте в раздел post добавим:

post {
    always {
        junit allowEmptyResults: true, testResults: '**/out/junit/*.xml'
        allure includeProperties: false, jdk: '', results: [[path: 'out/addallure.xml']]
        archiveArtifacts artifacts: '**/out/cf/*.cf', onlyIfSuccessful: true
    }
    failure {
        cmd("vrunner session unlock ${RasConnectionString}")
    }
    success {
        cmd("echo success")
    }
}

Это значит, что мы будем:

  • выгружать отчет в Junit;
  • отслеживать состояние сборки в Allure;
  • и архивировать артефакты сборки – cf-файл конфигурации будет прикреплен в Jenkins.

 

Результаты сборки

Давайте теперь попробуем собрать:

  • первый шаг – получение исходников;
  • далее – подготовка среды;
  • далее – подготовка исходников (здесь он генерирует файл конфигурации);
  • далее – шаг загрузки конфигурации в базу;
  • далее – принятие изменений;
  • далее – синтаксическая проверка;
  • далее – тестирование функциональности, где у нас запускается 1С и прогоняются сценарии.
  • далее – запускается сонар;
  • и выполняются действия по завершению.

 

 

Мы видим строчку сборки, у которой появился:

  • значок Allure – можно пройти и получить результат нашего тестирования с помощью Vanessa Automation.
  • и значок SonarQube – в него тоже можно провалиться и посмотреть, какие ошибки нашел Sonar.

Все, сборочная линия собрана, можно использовать.

 

Вопросы.

  • Вы показали и Vanessa Automation и Сценарное тестирование, но в линии участвовала Vanessa Automation. Что вы применяете на практике и какие заметили плюсы и минусы?

  • Первым мы развернули «Сценарное тестирование», хотели его использовать. А в дальнейшем посмотрели на Vanessa Automation, как она хорошо вкладывается в автоматизацию, вызывается и плюс она нам просто больше понравилась. Поэтому у нас в сборочной линии именно Vanessa Automation. Она много позволяет, хорошо встраивается. Почему нет? А в связке с СППР это оказался еще и более интересный продукт за счет того, что СППР может отслеживать еще и саму структуру конфигурации. Можно в ней рисовать, потом программировать и тут же тестировать. Получилась цельная инфраструктура, цельная экосистема.

  • Я правильно понимаю, что вы считаете, что Vanessa Automation – это наиболее функциональный вариант?

  • Да, мы попробовали одно, второе, третье и выбрали то, что нам больше понравилось.

  • Здесь не упоминалась «Автоматизированная проверка конфигурации» – вы не пробовали использовать ее совместно с SonarQube?

  • Плюс SonarQube в том, что он очень хорошо интегрируется в нашу сборочную линию. Правила из АПК тоже можно использовать, там просто выгружаются результаты проверок АПК и можно впихнуть их в SonarQube и есть специальный плагин. Это некое расширение. Но плюс SonarQube в том, что он есть из коробки по встраиванию sonar-scanner в нашу сборочную линию. Наша цель – чтобы проходила полностью сборка, все тесты, все это в едином контуре происходило. И в этом плане нам SonarQube просто лучше всего подошел. А АПК тоже есть, мы его тоже используем, но поскольку/постольку.

  • А не пробовали расширять правила для SonarQube?

  • Мы используем тот набор правил, который есть в OpenSource. Его, конечно, не для всех целей хватает. Но опять-таки, можно выгрузить проверки из АПК. И Community Plugin развивается, но просто руки еще не дошли. Всегда можно самому поучаствовать – у них есть репозиторий, где в принципе описано, как можно эти правила туда дописать, если хочется.

  • И еще вопрос по поводу линии сборки – вы сравнивали Jenkins и Teamcity?

  • С Teamcity не работали. Выбрали Jenkins, потому что есть готовая документация, есть готовые примеры. Мы не рассматривали всех конкурентов, мы выбрали то, что нам больше подошло.

  • Тут вопрос больше к практике применения – что для 1С удобнее ложится? Jenkins, Teamcity или без разницы?

  • Нам больше подошел Jenkins.

  • SonarQube – это же больше статическая проверка кода. Кто на практике следит за разработчиками в части правильной разработки? И куда это вписывается в этот пайплайн?

  • Да, SonarQube не проверяет архитектуру, он проверяет просто синтаксический контроль. Да, должен быть архитектор. В том же СППР если мы рисуем проект – там это можно посмотреть. Архитектор здесь не отменяется. Это все не отменяет архитектора как такого? Это упрощает жизнь архитектора. Архитектор может тратить время на то, чтобы проверять именно функциональность. А эти все вещи автоматизированы и на это мы время не тратим, мы просто смотрим результат.

  • То есть, он существует где-то в фоне, или он уже после SonarQube проверяет, если все ок?

  • Он, в том числе, проверяет до входа в это все. С архитектором должны быть согласованы все эти изменения. Когда кто-то добавляет новый объект, он это делает не потому, что сам захотел, а он должен это согласовать, обосновать, что он нужен.

  • А ошибки, которые генерируются SonarQube – они попадают в систему учета задач? Как обеспечивается постановка и контроль задач при этом?

  • Сейчас у нас есть только своя система BPM, которую Инфостарт разрабатывает сам для себя. Да, планируется, что она будет линковаться с этим всем. Пока она не линкуется, но она развивается.

  • Все это мы исследуем и эту методологию разрабатываем, чтобы, в конце концов, это масштабировать на уровень портала, чтобы мы открыли свой BPM уже с интегрированными этими DevOps-технологиями. Уже из самой задачи будет создаваться некая виртуальная среда, в которой это все будет. Поэтому у нас в планах это все отдать сообществу. И, соответственно, привлечь его для написания этих сценариев тестирования и т.д. Мы будем это продвигать и всячески пропагандировать

  • Кто у вас в команде пишет функциональные тесты на языке Gherkin? У нас на работе я сейчас тоже продвигаю DevOps и тяжело передать это кому-то. Нужно обучать отдельного человека, наверное. Расскажите, как у вас.

  • У нас нет выделенного тестировщика, мы каждый по своей функциональности, которую реализуем, пишем сценарные тесты. Это разработчик пишет. Мы пишем сценарные тесты, включаем их в сборочную линию и прогоняем.

  • А что вы можете сказать про оповещения SonarQube? У нас тоже SonarQube подключен, но оповещения на почту вообще не информативные. Может быть, это как-то настраивается?

  • Как вариант, можно из Jenkins посылать, если что-то упало. Не прошел порог качества – можно из Jenkins посылать. Он интегрируется с очень многими мессенджерами. Есть отдельный плагин для Slack, например. Почта – это то, что есть из коробки. А остальное нужно понастраивать. Лично мне хватает гиперссылки – он ссылается сюда, иди туда, смотри здесь. Проваливаешься и уже понятно, на что он ругается.

  • Вы сказали, что разработчики пишут сами автотесты, а пишутся ли тесты для разных ролей? Один код может запускаться под разными пользователями, под разными ролями. Если проверять под полными правами – все хорошо, а под реальными пользователями – то прав не хватает на регистр, то на константу. Как этот вопрос решается?

  • Можно настроить параметры запуска, под какими пользователями запускать данный тест. Пока мы этого не делали, потому что у нас только полные права, небольшая локальная разработка, на которой мы все это проверяем. Но в дальнейшем мы планируем тестировать под каждой из ролей конфигурации.

  • Получается, что для каждого автотеста нужно написать свой вариант?

  • Нет, тест один и тот же. Мы же проверяем одни и те же действия, мы просто разные профили запуска указываем – в каком контексте запускается данный тест.

  • Проводили ли вы нагрузочное тестирование сборочной линии на примере какой-нибудь типовой конфигурации – Бухгалтерия, Зарплата? Мне интересно за время, которое выполняется?

  • Очень долго. Несколько часов у нас выполнялось. У нас для внутренней автоматизации внедрили КА, мы использовали GitSync, у нас еще один шаг с GitSync был. Мы выгружали ветку в хранилище. Эти шаги проходили час где-то. И важный момент – тестирование функциональности не очень объемное было. SonarQube мы не использовали, потому что он просто не взлетал по какой-то причине. Мы не смогли понять, почему. Предположение, что это просто нехватка ресурсов, а возможности проверить у нас на тот момент не было.

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на конференции Infostart Event 2019 Inception.

93b7172cfbf01d9c59c06e931383a3df.png

Технологический консалтинг и DevOps для 1С

Мы решаем проблемы производительности, инфраструктуры и автоматизации разработки на 1С


Инфостарт Tech Event 2026

Инфостарт A&PM Event 2026

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

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

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

См. также

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Информационная безопасность Инструменты администратора БД Системный администратор Программист 1С 8.3 Беларусь Россия Казахстан Абонемент ($m)

Как реализовать безопасное маскирование данных в процессе CI/CD без создания промежуточных копий баз. Объясняем, как использовать инструмент pg_anon для автоматизации скрытия персональных данных при тестировании и развёртывании, сохраняя целостность и структуру информации. Материал объединяет практику Site Reliability Engineering (SRE) с задачами защиты данных, демонстрируя подход, при котором разработчики и DevOps;инженеры могут работать с реалистичными, но обезличенными данными, не нарушая требования безопасности и конфиденциальности.

1 стартмани

11.09.2026    797    0    Ninel_S    0    

0

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Системный администратор Программист Руководитель проекта Стажер 1С 8.3 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1C:ERP Беларусь Россия Казахстан Абонемент ($m)

В четвёртой части серии SRE-Suite-for-1C-platform мы переходим к практической автоматизации развёртывания отказоустойчивого кластера PostgreSQL для высоконагруженных систем 1С на Linux. В материале подробно разбирается инженерное решение без HAProxy — с использованием виртуального IP-адреса и vip-manager от CYBERTEC, обеспечивающего прямое подключение к активному мастеру без лишних задержек и точек отказа. Показана структура Ansible-модуля: подготовка ОС, развёртывание etcd, настройка Patroni с параметрами для больших нагрузок 1С. В конфигурационный шаблон Patroni автоматически закладываются параметры, критически важные для высоконагруженных баз данных, запуск vip-manager и полная автоматизация создания трёхнодового кластера. В конце — пошаговый Quick Start и планы развития модуля, включая резервное копирование, оптимизацию ОС Linux и rolling updates PostgreSQL.

1 стартмани

11.09.2026    673    0    Ninel_S    0    

0

DevOps и автоматизация разработки Программист 1С:Предприятие 8 1C:Бухгалтерия 1C:ERP 1С:УТ Бесплатно (free)

Я автоматизировал доставку доработок в базы 1С, к которым можно подключиться только по RDP через шлюз. У меня не было ни SSH, ни WinRM, ни общих папок, ни права устанавливать на сервер свои программы. Каналом связи стал диск рабочей станции, проброшенный в RDP-сеанс, а исполнителем команд служит PowerShell-агент в этом сеансе. В статье расскажу о захвате объектов и помещении изменений в хранилище, динамическом обновлении боевой базы с автоматической остановкой, установке расширений и доступе к базе через MCP по COM без клиента 1С. Ещё разберу несколько неочевидных ограничений платформы и RDP, с которыми столкнулся по ходу работы. Часть из них описана на форумах, а упоминаний о других я не нашёл.

10.09.2026    678    BiLBelarus    0    

4

DevOps и автоматизация разработки Администрирование СУБД Групповая разработка (Git, хранилище) Системный администратор Программист Руководитель проекта Стажер 1С 8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Предприятие 8. Транспортная логистика, экспедирование и управление автотранспортом КОРП 1C:ERP Беларусь Россия Казахстан Абонемент ($m)

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

1 стартмани

10.09.2026    715    0    Ninel_S    0    

5

DevOps и автоматизация разработки Linux HighLoad оптимизация Групповая разработка (Git, хранилище) Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С 8.3 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Комплексная автоматизация 2.х Беларусь Россия Казахстан Абонемент ($m)

Системный анализ архитектурных границ масштабирования учетных систем «1С:Предприятие 8.3» под управлением PostgreSQL в ОС Linux. Формулирование инженерной методологии сквозного проекта «Торговый контур», определение измеримых целевых показателей (p95, MTTR, APDEX) и стратегии поэтапной модернизации эксплуатационного контура без остановки промышленных учетных процессов.

1 стартмани

07.09.2026    1004    Ninel_S    10    

1

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

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

03.09.2026    10751    KatanaDragon511    28    

40

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

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

31.08.2026    3114    Evil Beaver    2    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Dach 437 18.12.20 12:34 Сейчас в теме
На github случайно не выложены все эти файлики для пайплайна в отдельном репо?
2. Kyrales 147 14.04.21 15:50 Сейчас в теме
Статья очень полезная
3. Darknessalex 11.06.21 00:52 Сейчас в теме
Доброго времени суток!
Воспользовался данной статьёй, чтобы попробовать реализовать сборочную линию, но столкнулся с проблемой на этапе подготовки исходников. Сначала EDT выдаёт сообщение с нарушенной кодировкой, а затем на этапе C:\H\workspace\conf>vrunner compile --src C:\H\workspace\conf/out/conf --out C:\H\workspace\conf/out/cf/1Cv8.cf выдаёт ошибку о том, что файлов в папке out нет. Их на самом деле там нет.


Не очень понимаю, почему туда не помещаются файлы и почему кодировка в сообщении EDT кривая. Может быть суть проблемы кроется там?
Надеюсь на Вашу помощь!
5. user1411559 16.11.21 14:48 Сейчас в теме
с начала надо декомпилировать конфигурацию
vrunner decomplie, появится нужный файл которого не хватает, после чего уже можно из исходников собрать .cf
4. user1411559 16.11.21 14:45 Сейчас в теме
Полезная статья, автор подскажи пожалуйста, как внести изменения в конфигурацию из исходников, минуя все хранилища конфигурация
6. fggf 28.06.23 15:27 Сейчас в теме
rasConnectionString откуда брать значения этих параметров?
7. pavlo 20.02.24 12:15 Сейчас в теме
не понятно как Сонар заставить работать с русскими названиями файлов, так как в gitlab ci консоле когда джоб работает там одни ромбики и есть подозрение что сонар и кричит на них что это дубликаты :(
8. MaCCapAkIII 18.09.24 15:38 Сейчас в теме
Приветствую. У Вас RAS постоянно работает, как служба? Отдельной командой его не запускаете,
Для отправки сообщения требуется регистрация/авторизация