Перейти к содержанию

Раздел 8. Начальная настройка

8.1 Создание проекта на сервере SonarQube

На сервере SonarQube создать проект для анализируемой конфигурации.

8.2 Создание токена для авторизации

На сервере SonarQube сгенерировать токен авторизации (рис. 8.1).

image-20200812115651743

8.3 Структура каталогов для исходников 1С-решения

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

Примером такой структуры является шаблон vanessa-bootstrap (https://github.com/gitter-badger/vanessa-bootstrap).

Преимущества данного шаблона:

  • содержит выработанную и обдуманную семантически структуру каталогов,
  • содержит необходимые подмодули для быстрого старта.

Структура каталогов для разработчиков 1С шаблона vanessa-bootstrap:

  • Visual Studio Code

image-20200812115807027

  • GitHub / GitLab

image-20200812115813917

Описание элементов шаблона:

Имя Описание
doc Файлы документации в формате Markdown: рекомендации разработчикам и команде проекта, описание релизов (RELEASE NOTES) и оперативного плана (ROADMAP). (Пользовательские инструкции хранятся в WiKi проекта.)
examples Примеры кода c расширением bsl. Текстовые описания на языках Gherkin и Markdown.
features Компоненты и функциональность продукта. Автоматизированные сценарии проверки, структурированные по подсистемам и объектам продукта.
lib Внешние отчеты и обработки, необходимые для работы продукта, разработанные в рамках создания продукта и не являющиеся сторонними разработками.
src Исходные тексты решения, созданные на платформе 1С:Предприятие: * исходные коды, разработанные с помощью проекта Graphite, * исходные коды, интегрированные из хранилища 1С с помощью инструмента vanessa-unpack, * исходные коды обработок, интегрированные с помощью precommit1C.
src/cf Исходники конфигурации
src/cfe Исходники расширений, например, расширение «фикс-задачи-25» кладем в src/cfe/фикс-задачи-25 расширение «ФормаПродаж» кладем в src/cfe/ФормаПродаж
tools Любые сторонние утилиты, необходимые для настройки проекта или для дополнительной установки.
vendor Внешние зависимости – библиотеки, конфигурации и т.д. Модули по умолчанию: vanessa-behavior – для разработки через поведение, vanessa-base-init – для создания эталонных фиксированных конфигураций, vanessa-bdd-editor – для удобного управления требованиями заказчика, vanessa-unpack – для интеграции с хранилищем 1С.
.gitignore Файл .gitignore для скрытия файлов и папок от системы контроля версий Git.
.gitmodules Структура подмодулей
LICENSE Файл лицензии
README.md Описание проекта, вводная информация, информация о других файлах проекта, порядок установки, ссылки и т.п.

Порядок установки шаблона vanessa-bootstrap (применения в своем проекте)

  1. Склонируйте репозиторий:
git clone https://github.com/silverbulleters/vanessa-bootstrap.git <название-вашего-продукта-1С>
  1. Подключите репозиторий к своему git-серверу (GitHub, Bitbucket, GitLab, etc):
cd <название-вашего-продукта-1С>
git remote set-url origin git://new.url.here
  1. Подпишитесь на обновление шаблона:
git remote set-url bootstrap https://github.com/silverbulleters/vanessa-bootstrap.git

8.4 Настройка сканирования исходных кодов

Настройка sonar-project.properties

Самый простой и надежный способ создать файл настроек sonar-project.properties – это воспользоваться поставляемым инструментом «vanessa-sonar», который позволяет создать полноценный файл настроек с указанием всех необходимых ключей настроек. Смотрите раздел Инструмент «vanessa-sonar» – тонкая настройка анализа файлов.

При заполнении файла sonar-project.properties рекомендуется подключать только необходимые расширения файлов, т.к., например, анализ HTML-файлов дает сильно ощутимый прирост по времени выполнения (и памяти соответственно), а практической пользы не несет.

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

sonar.inclusions=**/*.bsl,**/*.os,**/*.xml

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

sonar.exclusions=**/Reports/**/

или отключив только регламентированную отчетность:

sonar.exclusions=**/Reports/\u0420\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d*/**/*.*

Ниже приведены более подробные рекомендуемые настройки для исключения файлов. Также можно отключать отчеты по частичному вхождению.

В файлах *.properties нельзя использовать кириллицу – кириллические символы необходимо кодировать символами юникода (\u1234).

На клиентской машине нужно место под сам git-репозиторий (в случае запуска анализа на CI-сервере и не под один) плюс порядка 10 гигабайт места под временные файлы.

В результате правильной настройки в каталоге проекта должен быть создан файл sonar-project.properties с примерным содержимым:

# must be unique in a given SonarQube instance
sonar.projectKey=my_project
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 7.4
sonar.projectName=My project
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 
sonar.sources=./src/cf

# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

#bsl
sonar.inclusions=**/*.bsl,**/*.os,**/*.xml
sonar.exclusions=**/*.html,**/Ext/Help.xml,**/Ext/Template.xml,**/Templates/**/*.xml,**/Ext/Predefined.xml,**/Ext/Picture.xml,**/Ext/Flowchart.xml,ExternalDataSources/**/Content.xml,ExchangePlans/**/Content.xml
sonar.lang.patterns.xml=**/*.xsd,**/*.xsl 

# Пропускать файлы на полной поддержке поставщика, со статусом ""Не редактируется"" 
# sonar.bsl.skipVendorSupportedObjects=true

# Глубина поиска файлов описаний корней конфигураций проекта (файлы Configuration.xml и Configuration.mdo) относительно файла sonar-project.properties
# sonar.bsl.maxDepthSearchConfiguration=4 

# Файлы замечаний от внешних инструментов (в формате json)-  1C:EDT и т.п.
# sonar.bsl.acc.externalRulesPath=./edt-validate.json,./acc.json
# Файл замечаний от внешних инструментов (в формате xml) от 1C:АПК 
# sonar.bsl.acc.resultsPath=./acc.xml

# sonar.host.url=http://localhost:9000
# или для облачных клиентов
# sonar.host.url=https://sonar.silverbulleters.org

# sonar.login=ВашТокенИзНастроекБезопасностиПользователя

# адрес страницы генерации токена - например, http://localhost:9000/account/security/
# или для облачных клиентов https://sonar.silverbulleters.org/account/security/

Оперативная память

Для клиентской части анализа критически необходимо указывать параметр «-Xmx» (по умолчанию анализу/сканированию выделяется только 768 мегабайт памяти).

Конфигурация 1С (количество миллионов строк) Минимально необходимая оперативная память Рекомендуемые параметры
ERP 2Gb 4Gb
УХ 2GB 4Gb
БП 1GB 2Gb
УТ 1GB 2Gb
ЗУП 1GB 2Gb
УНФ 1Gb 2Gb
КА 1GB 2Gb
БСП 1GB 2Gb

Дополнительно мы рекомендуем использовать «Oracle JDK» и указывать специальные флаги для включения более агрессивного сборщика мусора – это позволяет экономить выделяемую RAM и снизить лимит памяти.

Установка параметров клиентской части анализа (Sonar-scanner) производится через установку переменной среды «SONAR_SCANNER_OPTS».

Пример указания (4 Gb для Windows):

set SONAR_SCANNER_OPTS=-Xmx4G

Жесткие диски

На машине, на которой запускается Sonar-scanner, желательно иметь SSD-диск и располагать анализируемый проект на нем. В целом на синтетических тестах SAS-диски проигрывают SSD (в некоторых сценариях на порядок).

Нагрузка на диск составляет примерно 25% от общей нагрузки.

Процессор

Частота процессора влияет на скорость анализа «git blame», скорость работы измерителя дублирования кода и на общую скорость выполнения проверок. Если есть возможность выделить ядра помощнее (по крайней мере на клиентскую часть), то стоит это сделать.

В момент клиентской части анализа средняя нагрузка на процессор - 100% в двух третях (по продолжительности) анализа, 50%-70% во одной трети анализа.

Антивирус и прочие «проактивные» системы защиты

Во время работы Sonar-scanner активно создает и удаляет временные файлы. Работа антивируса может значительно (до двух раз) замедлить скорость выполнения анализа. При работе Sonar-scanner рекомендуется:

  • Либо добавлять в исключения каталоги «%USERPROFILE\.sonar» и подкаталог «.scannerwork», автоматически создаваемый в текущей рабочей директории при запуске анализа.
  • Либо отключать программные системы защиты

8.5 Запуск сканирования Sonar-scanner на сервере CI «Jenkins»

Для запуска Sonar-scanner из Jenkins необходимо:

  • установить плагин «SonarQube Scanner» - https://plugins.jenkins.io/sonar
  • в секции «Global Tool Configuration» добавить новый установщик «SonarQube Scanner» с указанием имени и способа установки (рекомендуемый - автоматически из Maven Central)
  • в секции «System Configuration» добавить новый элемент в настройку «SonarQube servers», указав параметры подключения к серверу SonarQube
  • добавить в Jenkinsfile необходимые шаги для запуска сканирования (смотрите ниже)

Запуск в режиме одной ветки

...code...
stage('QA') {
    steps {
        script {
          // Получение пути к установленной автоматически утилите sonar-
scanner.
          // Имя утилиты должно совпадать с заданным в настройках Global
Tool Configuration
          def scannerHome = tool 'sonar-scanner'
          def sonarCommand = "${scannerHome}/bin/sonar-scanner"
          // Получение данных авторизации к серверу SonarQube.
          // Имя сервера должно совпадать с заданным в настройках System Configuration
          withSonarQubeEnv('silverbulleters') {
                sh "${sonarCommand}"
          }
        }
    }
}
...code...

Указание версии проекта

В качестве версии проекта можно использовать версию конфигурации из файла Configuration.xml в корневом каталоге выгрузки конфигурации в файлы. Для получения значения версии можно воспользоваться механизмами чтения файлов и поиска по регулярному выражению:

...code...
stage('QA') {
  steps {
    script {
      // Чтение файла Configuration.xml в переменную
      def configurationText = readFile encoding:'UTF-8', file:'src/cf/Configuration.xml'
    // Получение значения тега Version
def configurationVersion = (configurationText =~ /<Version>(.*)<\/Version>/)[0][1]
      def scannerHome = tool 'sonar-scanner'
      sonarCommand = "${scannerHome}/bin/sonar-scanner 
-Dsonar.projectVersion=${configurationVersion}"
      withSonarQubeEnv('silverbulleters') {
        sh "${sonarCommand}"
      }
    }
  }
}
...code...

8.6 Запуск ручного сканирования Sonar-scanner

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

  1. Склонировать репозитарий исходного кода или выгрузить их непосредственно в целевую папку из конфигуратора.
  2. На сервере SonarQube создать проект для анализируемой конфигурации и сгенерировать токен авторизации (Рисунок 8-2)
  3. В корневом каталоге проекта создать и заполнить конфигурационный файл «sonar-project.properties»
  4. Запустить сканирование командой:
sonar-scanner.bat -D"sonar.login=<ТОКЕН>"

В случае каких-либо технических проблем для сбора лога запустить сканирование командой:

sonar-scanner.bat -X -D"sonar.login=<ТОКЕН>" > log.txt