Практика применения 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.

 

30 мая - 1 июня 2024 года состоится конференция Анализ & Управление в ИТ-проектах, на которой прозвучит 130+ докладов.

Темы конференции:

  • Программная инженерия.
  • Инструментарий аналитика.
  • Решения 1С: архитектура, учет и кейсы автоматизации на 1С.
  • Управление проектом.
  • Управление продуктом.
  • Soft skills, управление командой проекта.

Конференция для аналитиков и руководителей проектов, а также других специалистов из мира 1С, которые занимаются системным и бизнес-анализом, работают с требованиями, управляют проектами и продуктами!

Подробнее о конференции.

 


См. также

Автотесты для типовых конфигураций ERP Управление предприятием 2 и Комплексная автоматизация 2 (для vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарии возможно использовать как для vanessa-automation, так и для СППР. Поддерживаемые версии конфигураций ERP2 и КА2: 2.5.15.111.

2220 руб.

04.07.2022    6908    26    1    

24

Системы контроля версий для 1С-разработчиков.

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

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9363    78    4    

112

Автотесты для типовых конфигураций Бухгалтерия предприятия КОРП 3.0 и Бухгалтерия предприятия 3.0 (vanessa automation)

Тестирование QA DevOps и автоматизация разработки Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Готовые тестовые сценарии, предназначенные для регресс-тестирования функционала конфигурации после обновления типовым релизом. Сценарии проверяют интерактивное заполнение форм документов, справочников и результат проведения документов. Сценарий – feature-файл, разработанный с помощью vanessa-automation. Запуск сценария выполняется интерактивно с помощью vanessa-automation или с помощью vanessa-runner в CI-системах. Доступно тестирование тонкого клиента. Поддерживаемые версии конфигураций 1С:Бухгалтерия предприятие 3.0 и версии КОРП: 3.0.144.49.

1728 руб.

20.01.2022    6683    10    0    

9

Управление сборкой. Расширение для конфигурации СППР

DevOps и автоматизация разработки Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Подсистема «Управление сборкой GLI» предназначена для динамического формирования сборочных линий Gitlab и отслеживания процесса доработок систем на базе1С:Предприятия Позволяет упростить выпуск новых релизов системы, подготовить описание доработок системы. Интегрируется с GitLab API по событиям Push, Merge-request, Pipeline. Уведомляет пользователей о результатах сборки/тестирования сборочных конвейеров через СВ, либо при её недоступности или отсутствию по E-Mail. Поможет при отправке исправлений ошибок в общую базу тестирования, сформирует запросы на слияние в ветку версии только по протестированному и подтверждённому функционалу. Подсистема рассчитана исключительно на клиент - серверную архитектуру тестовых ИБ. Поддерживаемая версии СППР 2.0.4.15, платформа не ниже 8.3.17.1549, 2.0.7.3 / не ниже 8.3.21.1664, начиная с релиза 1.0.4.30 требуется платформа не ниже 8.3.23 рекомендуемый релиз 8.3.23.1997

7000 руб.

26.08.2022    10742    7    5    

30

Автоматическое подтверждение легальности обновления базы или как обновить 100 типовых баз 1С за 5 часов

DevOps и автоматизация разработки Обновление 1С Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

2 стартмани

08.05.2019    24368    55    VPanin56    26    

27

1С, СППР и Архитектура как код

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

Можно ли идеи подхода «Архитектура как код» положить на 1С или иную платформу, чтобы не изобретать ещё какой-то язык и сразу получить множество готовых библиотек функций и инструмент достижения главной цели подхода AaC.

01.02.2024    2703    roman72    9    

8

TCP прокси-сервер хранилища конфигурации 1С

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

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    2987    kamisov    17    

59

Infrastructure as code: кнопка «Сделать всё», или Упаковываем наше окружение в 5 кБ текста

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

Когда под каждый проект нужно развернуть отдельный стенд разработки и сборочную линию для его обслуживания, велик риск влияния человеческого фактора. О том, как зафиксировать инженерный опыт в скриптах и унифицировать необходимые настройки для автоматизированного разворачивания инфраструктуры с помощью Terraform и Ansible, пойдет речь в статье.

01.11.2023    1377    Libelle    5    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Dach 373 18.12.20 12:34 Сейчас в теме
На github случайно не выложены все эти файлики для пайплайна в отдельном репо?
2. Kyrales 144 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 консоле когда джоб работает там одни ромбики и есть подозрение что сонар и кричит на них что это дубликаты :(
Оставьте свое сообщение