В непрерывном процессе интеграции разработчики представляют код общему репозиторию. Автоматизированная система сборки с помощью инструмента, такого как Дженкинс создает и тестирует каждое представление равномерно или на основе предопределенных триггеров и интегрирует код. Можно запустить анализ Polyspace® как часть этого процесса.
Эта тема предоставляет демонстрационные Сценарии оболочки, которые запускают аналитическое использование Polyspace Polyspace Bug Finder™ Server™ и загружают результаты для анализа в Polyspace доступ к веб-интерфейсу. Скрипт также отправляет уведомления по электронной почте потенциальным рецензентам. Уведомленные рецензенты могут войти в систему к Polyspace доступ к веб-интерфейсу (если у них есть лицензия Polyspace Bug Finder Access™), и рассмотрите результаты.
Скрипты записаны для определенного набора инструментальных средств разработки, но могут быть легко расширены к процессам, используемым в вашем проекте, команде или организации. Скрипты также предназначены, чтобы быть запущенными в вольном проекте Дженкинса. Если вы используете Конвейеры Дженкинса, смотрите Выборку Конвейерные Скрипты Дженкинса для Анализа Polyspace.
В частности, скрипты:
Работайте на Linux® только.
Скрипты используют некоторые специфичные для Linux команды, такие как export
. Однако эти команды не являются неотъемлемой частью рабочего процесса Polyspace. Если вы пишете скрипты Windows® (.bat
файлы), используйте эквивалентные команды Windows вместо этого.
Работа только с Дженкинсом после того, как вы устанавливаете плагин Polyspace.
Скрипты спроектированы для плагина Дженкинса этими двумя способами:
Скрипты используют функции помощника $ps_helper
и $ps_helper_access
для более простых сценариев. Помощник функционирует результаты Polyspace экспорта для почтовых прикреплений и утилит командной строки использования, чтобы отфильтровать результаты.
Эти функции помощника доступны только с плагином Дженкинса. Однако базовые команды идут с установкой Polyspace Bug Finder Server. На инструментах автоматизации сборки кроме Дженкинса можно создать эти функции помощника с помощью polyspace-report-generator
команда или polyspace-access
команда (с -export
опция). Смотрите Отправляют Уведомления по электронной почте Результатами Polyspace Bug Finder.
Если вы выполняете распределенную сборку в Дженкинсе, плагин должен быть установлен в той же папке в той же операционной системе и на главном узле и на узле агента, выполняющем анализ Polyspace. В противном случае вы не можете использовать функции помощника.
Скрипты создают текстовые файлы для почтовых прикреплений и почтовых предметов и тел для персонализированных электронных писем. Если вы устанавливаете плагин Polyspace в Дженкинсе, расширение почтового плагина доступно для использования в ваших проектах Дженкинса. Почтовый плагин позволяет вам легко посылать персонализированные электронные письма с ранее созданными предметами, телами и прикреплениями. Без плагина Polyspace необходимо найти альтернативный способ послать электронные письма.
Запустите анализ Средства поиска Ошибки.
Скрипты запускают Средство поиска Ошибки на демонстрационном примере Bug_Finder_Example
. Если вы устанавливаете продукт Polyspace Bug Finder Server, папкой, содержащей демонстрационный пример, является
. Здесь, polyspaceserverroot
/polyspace/examples/cxx/Bug_Finder_Example
папка установки для Серверных продуктов Polyspace, например, polyspaceserverroot
/usr/local/Polyspace Server/R2019a/
.
Можно легко адаптировать скрипт, чтобы запустить Программу автоматического доказательства Кода. Замените polyspace-bug-finder-server
с polyspace-code-prover-server
. Можно использовать демонстрационный пример Code_Prover_Example
в частности предназначенный для Программы автоматического доказательства Кода.
Чтобы запустить анализ Polyspace сервера и рассмотреть результаты в Polyspace доступ к веб-интерфейсу, необходимо выполнить одноразовую настройку.
Чтобы запустить анализ, необходимо установить один экземпляр Серверного продукта Polyspace.
Чтобы загрузить результаты, необходимо настроить компоненты, требуемые размещать веб-интерфейс Polyspace доступ.
Чтобы просмотреть загруженные результаты, у вас (и каждый разработчик, рассматривающий результаты), должна быть одна лицензия Polyspace.
Подобные требования применяются к анализу Polyspace Code Prover™ сервера.
Смотрите сервер Polyspace установки и доступ к продуктам.
Чтобы установить плагин Polyspace, в интерфейсе Дженкинса, выбирают Manage Jenkins слева. Выберите Manage Plugin. Ищите плагин Polyspace и затем загрузите и установите плагин.
Следующие шаги обрисовывают в общих чертах, как настроить анализ Polyspace в Дженкинсе после установки плагина Polyspace. Обратите внимание на то, что шаги относятся к версии 2.150.1 Дженкинса. Шаги в вашей версии Дженкинса и вашей установке плагина Polyspace могут немного отличаться.
Если вы используете различный инструмент автоматизации сборки, можно выполнить подобные шаги настройки.
Задайте полные пути папки, содержащей команды Polyspace и имя хоста и номер порта сервера, размещающего Polyspace доступ к веб-интерфейсу. После того, как вы зададите пути в ваших скриптах, вы не должны использовать полные пути для команд или деталей сервера для загрузки результатов.
В интерфейсе Дженкинса выберите Manage Jenkins слева. Выберите Configure System.
В разделе Polyspace задайте следующее:
Пути к командам Polyspace.
Путь относится к
, где polyspaceserverroot
/polyspace/bin
папка установки для Серверных продуктов Polyspace, например, polyspaceserverroot
/usr/local/Polyspace Server/R2019a/
.
Имя хоста, номер порта и протокол (http
или https
) используемый сервером, размещающим Polyspace доступ к веб-интерфейсу.
Поле Name позволяет вам задавать удобное сокращение, которое вы используете позже в проектах Дженкинса.
В разделе E-mail Notification задайте сервер SMTP своей компании (и другие детали, необходимые для отправки электронных писем).
Когда вы создаете проект Дженкинса (например, Вольный проект), можно обратиться к путям к Polyspace глобальными сокращениями, которые вы задали ранее.
Создать проект Дженкинса для рабочего Polyspace:
В интерфейсе Дженкинса выберите New Item слева. Выберите Freestyle Project.
В разделе Build Environment проекта введите два кратких имени, которые вы задали ранее:
Имя для пути к папке, содержащей команды Polyspace
Имя для деталей сервера, размещающего Polyspace доступ к веб-интерфейсу.
Кроме того, введите вход в систему и пароль, который может использоваться, чтобы загрузить на Polyspace доступ к веб-интерфейсу. Вход в систему и пароль должны быть сопоставлены с лицензией Polyspace Bug Finder Access.
В разделе Build проекта можно ввести скрипты, которые используют команды Polyspace и детали сервера, размещающего Polyspace доступ к веб-интерфейсу.
Скрипты запускают анализ Polyspace и загружают результаты на Polyspace доступ к веб-интерфейсу.
В разделе Post-build Actions проекта сконфигурируйте адреса электронной почты и прикрепления, которые будут отправлены после анализа.
Этот скрипт запускает анализ Средства поиска Ошибки, загружает результаты и экспортирует дефекты с высоким ударом для общего уведомления по электронной почте всем получателям.
Скрипт принимает, что текущая папка содержит папку sources
с .c
файлы. В противном случае измените линию gcc -c sources/*.c
с полным путем к источникам.
set -e export RESULT=ResultBF export PROG=Bug_Finder_Example export PARENT_PROJECT=/public/BugFinderExample_PRS_01 # ================================================================ # Trace build command and create an options file build_cmd="gcc -c sources/*.c" polyspace-configure \ -allow-overwrite \ -allow-build-error \ -prog $PROG \ -author jenkins \ -output-options-file $PROG.psopts \ $build_cmd # ================================================================ # Run Bug Finder on the options file polyspace-bug-finder-server -options-file $PROG.psopts -results-dir $RESULT # ================================================================ # Upload results to Polyspace Access web interface $ps_helper_access -create-project $PARENT_PROJECT $ps_helper_access \ -upload $RESULT \ -parent-project $PARENT_PROJECT \ -project $PROG # ================================================================ # Export results filtered for defects with "High" impact $ps_helper_access \ -export $PARENT_PROJECT/$PROG \ -output Results_All.tsv \ -defects High # ================================================================ # Finalize Jenkins status exit 0 |
После того, как скрипт запущен, можно создать действие постсборки, чтобы послать электронное письмо всем получателям с экспортируемым файлом Results_All.tsv
.
В этом скрипте, $ps_helper_access
сокращение для polyspace-access
команда с опциями, задающими имя хоста, порт, вход в систему и зашифрованный пароль, включена. Другой polyspace-access
опции явным образом написаны в скрипте.
Этот скрипт запускает предыдущий анализ Средства поиска Ошибки и загружает результаты. Однако скрипт отличается от предыдущего скрипта этими способами:
Скрипт использует run_command
функция, которая распечатывает сообщение при выполнении команды. Функция помогает определить из консоли выход, который запускает часть скрипта.
При экспорте результатов скрипт создает отдельный файл результатов для различных владельцев.
Основной файл Results_All.tsv
содержит все результаты. Этот файл отправляется в почтовом прикреплении менеджеру. Электронная почта менеджера сконфигурирована на шаге постсборки.
Если файл содержит больше чем 10 дефектов, состояние сборки рассматривается как отказ. Скрипт отправляет состояние UNSTABLE
в уведомлении по электронной почте.
Файл результатов Results_Users_userA.tsv
экспортируемый для userA
содержит дефекты от Программирования группы и с ударом Высоко.
Этот файл результата отправляется в почтовом прикреплении в userA
.
Файл результатов Results_Users_userB.tsv
экспортируемый для userB
содержит дефекты от функционального bug_memstdlib()
.
Этот файл результата отправляется в почтовом прикреплении в userB
.
Предмет отдельного почтового отправления создается для менеджера в файле mailsubject_manager.txt
и для пользователей userA
и userB
в файлах mailsubject_user_userA.txt
и mailsubject_user_userB.txt
соответственно.
Почтовое тело создается для электронной почты менеджеру в файле mailbody_manager.txt
.
Скрипт:
Принимает, что текущая папка содержит папку sources
с .c
файлы.
В противном случае измените линию gcc -c sources/*.c
с полным путем к источникам.
Принимает пользователей под названием userA
и userB
. В частности, адреса электронной почты userA@companyname.com
и userB@companyname.com
(определенный из имени пользователя и сервера SMTP сконфигурировал ранее), должны быть действительные адреса электронной почты.
Замените имена на имена реального пользователя.
set -e export RESULT=ResultBF export PROG=Bug_Finder_Example export REPORT=Results_List.tsv # ================================================================ # Define function to print message while running command run_command() { # $1 is a message # $2 $3 ... is the command to dump and to run message=$1 shift cat >> mailbody_manager.txt << EOF $(date): $message EOF "$@" } # ================================================================ # Initialize mail body cat > mailbody_manager.txt << EOF Dear Manager(s) Here is the report of the Jenkins Job ${JOB_NAME} #${BUILD_NUMBER} It contains all Red Defect found in Bug Finder Example project EOF # ================================================================ # Trace build command and create options file build_cmd="gcc -c sources/*.c" run_command "Tracing build command", \ polyspace-configure \ -allow-overwrite \ -allow-build-error \ -prog $PROG \ -author jenkins \ -output-options-file $PROG.psopts \ $build_cmd # ================================================================ # Run Bug Finder on the options file run_command "Running Bug finder" \ polyspace-bug-finder-server -options-file $PROG.psopts -results-dir $RESULT # ================================================================ # Upload results to Polyspace Access web interface run_command "Creating Project $PARENT_PROJECT" \ $ps_helper_access -create-project $PARENT_PROJECT run_command "Uploading on $PARENT_PROJECT/$PROG" \ $ps_helper_access \ -upload $RESULT \ -parent-project $PARENT_PROJECT \ -project $PROG \ -output upload.output PROJECT_RUNID=$($ps_helper prs_print_runid upload.output) PROJECT_URL=$($ps_helper prs_print_projecturl upload.output $POLYSPACE_ACCESS_URL) # ================================================================ # Export report run_command "Exporting report from $PARENT_PROJECT/$PROG" \ $ps_helper_access \ -export $PROJECT_RUNID \ -output $REPORT \ -defects High # ================================================================ # Filter Reports run_command "Filtering reports for defects" \ $ps_helper report_filter \ $REPORT \ Results_All.tsv \ Family Defect \ # ================================================================ # Filter Reports for userA and userB run_command "Filtering Reports for userA: Group=='Programming' and Information=='Impact: High'" \ $ps_helper report_filter \ $REPORT \ Results_Users.tsv \ userA \ Group Programming \ Information "Impact: High" run_command "Filtering Reports for userB: Function=='bug_memstdlib()'" \ $ps_helper report_filter \ $REPORT \ Results_Users.tsv \ userB \ Function "bug_memstdlib()" # ================================================================ # Update Jenkins status # Jenkins build status is unstable when there are more than 10 Defects BUILD_STATUS=$($ps_helper report_status Results_All.tsv 10) # ================================================================ # Update mail body and mail subject NB_FINDINGS_ALL=$($ps_helper report_count_findings Results_All.tsv) NB_FINDINGS_USERA=$($ps_helper report_count_findings Results_Users_userA.tsv) NB_FINDINGS_USERB=$($ps_helper report_count_findings Results_Users_userB.tsv) cat >> mailbody_manager.txt << EOF Number of defects: $NB_FINDINGS_ALL Number of findings owned by userA: $NB_FINDINGS_USERA Number of findings owned by userB: $NB_FINDINGS_USERB All results are uploaded in: $PROJECT_URL Build Status: $BUILD_STATUS EOF cat >> mailsubject_manager.txt << EOF Jenkins for Manager - Polyspace run completed with status $BUILD_STATUS and $NB_FINDINGS_ALL findings EOF for user in userA userB do echo "Jenkins for $user - $($ps_helper report_count_findings Results_Users_$user.tsv)) findings" > mailsubject_user_$user.txt done # ================================================================ # Exit with correct build status [ "$BUILD_STATUS" != "SUCCESS" ] && exit 129 exit 0 |
После того, как скрипт запущен, можно создать действие постсборки, чтобы послать электронное письмо менеджеру с экспортируемым файлом Results_All.tsv
. Задайте адрес электронной почты в поле Recipients, почтовый предмет в поле Mail Subject и почтовое тело в поле Mail Body.
Кроме того, отдельное электронное письмо послано userA
и userB
с файлами Results_Users_userA.tsv
и Results_Users_userB.tsv
в прикреплении (и содержимое mailsubject_user_userA.txt
и mailsubject_user_userB.txt
когда почта подвергает). Адресами электронной почты является userA@companyname.com
и userB@companyname.com
(определенный из имени пользователя и сервера SMTP сконфигурировал ранее).
Скрипт использует функцию помощника $ps_helper
отфильтровать результаты на основе группы, удара и функции. Функция помощника использует утилиты командной строки, чтобы отфильтровать основной файл для результатов и выполнить действия те, которые создают отдельный файл результатов для каждого владельца. Функция принимает эти меры в качестве аргументов:
report_filter
: Фильтры следуют из файла экспортированного текста на основе содержимого текстового файла.
Например:
$ps_helper report_filter \ Results_List.tsv \ Results_Users.tsv \ userA \ Group Programming \ Information "Impact: High"
Results_List.tsv
и записи к файлу Results_Users_userA.tsv
. Текстовый файл Results_List.tsv
содержит столбцы для Group
и Information
. Только те строки, где Group
столбец содержит Programming
и Information
столбец содержит Impact: High
записаны в файл Results_Users_userA.tsv
.report_status
: Возвращает UNSTABLE
или SUCCESS
на основе количества результатов в файле.
Например:
BUILD_STATUS=$($ps_helper report_status Results_All.tsv 10))
UNSTABLE
если файл Results_All.tsv
содержит больше чем 10 результатов (10 строк).report_count_findings
: Количество отчетов результатов в файле.
Например:
NB_FINDINGS_ALL=$($ps_helper report_count_findings Results_All.tsv)
Results_All.tsv
.prs_print_projecturl
: Использует имя хоста и номер порта, чтобы создать URL Polyspace доступ к веб-интерфейсу.
Например:
PROJECT_URL=$($ps_helper prs_print_projecturl Results_All.tsv $POLYSPACE_ACCESS_URL)
Results_All.tsv
(экспортируемый polyspace-access
команда) и извлечения URL Polyspace доступ к веб-интерфейсу в $POLYSPACE_ACCESS_URL
и URL текущего проекта в $PROJECT_URL
.
polyspace-access
| polyspace-bug-finder-server
| polyspace-configure
| polyspace-report-generator
| polyspace-code-prover-server
(Polyspace Code Prover Server)