У меня следующая проблема.
У нас есть решение .NET, которое содержит несколько проектов и для каждого проекта создано определение сборки VSTS, потому что мы не хотим создавать все решение каждый раз, когда происходит изменение в одном из отдельных проектов.
Конечно, в этом случае при использовании SonarQube мы хотели бы передать метрики только этого конкретного проекта / определения на сервер SonarQube, а не всего решения. По умолчанию происходит последнее, и это то, что мы хотим изменить.
Мы используем VSTS с Visual Studio 2015, плагином SonarQube версии 4.1.1 и SonarQube версии 6.7 (сборка 33306). В настоящее время агенты сборки работают в Windows 8.1.
Пример структуры решения:
MainSolution
- ProjectA
- ProjectB
- ProjectC
Каталог корневых источников для VSTS в этом случае C:\buildagent\vsts-agent\_work\19\s
Структура каталогов в агенте сборки будет выглядеть следующим образом:
C:\buildagent\vsts-agent\_work\19\s\ProjectA
C:\buildagent\vsts-agent\_work\19\s\ProjectB
C:\buildagent\vsts-agent\_work\19\s\ProjectC
Допустим, у нас есть определение сборки VSTS для ProjectB, которое строит только ProjectB. В этом случае мы хотим, чтобы SonarQube сканировал только содержимое проекта ProjectB.
Я пробовал несколько способов добиться этого, но ни одна из них не сработала.
sonar.inclusions / sonar.exclusions Кажется, работает только на уровне файла, а не каталога или проекта. Пробовал несколько настроек, и ошибок не было, но все игнорируется сканером, в результате чего на сервер SQ ничего не отправляется.
sonar.sources
Установка для свойства sonar.sources значения C:\buildagent\vsts-agent\_work\19\s\ProjectB
выглядела многообещающей, но при запуске сканера мы получили следующее сообщение об ошибке:
2018-04-04T07: 12: 51.0538120Z ИНФОРМАЦИЯ: Базовый каталог: C: \ buildagent \ vsts-agent_work \ 19 \ s 2018-04-04T07: 12: 51.0538120Z ИНФОРМАЦИЯ: Рабочий каталог: C: \ buildagent \ vsts-agent_work \ 19.sonarqube \ out.sonar 2018-04-04T07: 12: 51.0538120Z ИНФОРМАЦИЯ: Пути к исходным текстам: ProjectB 2018-04-04T07: 12: 51.0548120Z ИНФОРМАЦИЯ: Кодировка источника: windows-1252, локаль по умолчанию: nl_NL 2018-04 -04T07: 12: 51.1518136Z ОШИБКА: Ошибка при выполнении сканера SonarQube 2018-04-04T07: 12: 51.1518136Z ОШИБКА: файл ProjectB / App.config нельзя проиндексировать дважды. Убедитесь, что шаблоны включения / исключения создают непересекающиеся наборы для основного и тестового файлов.
Похоже, SonarQube дважды пытается проиндексировать ProjectB. Один раз с BaseDir, установленным в C:\buildagent\vsts-agent\_work\19\s\ProjectB
, и один раз с BaseDir, установленным в C:\buildagent\vsts-agent\_work\19\s
- sonar.projectBaseDir
При установке свойства sonar.projectBaseDir на C: \ buildagent \ vsts-agent_work \ 19 \ s \ ProjectB мы получаем ошибку ниже от SonarQube.
2018-04-04T07: 00: 51.2906744Z ОШИБКА: Ошибка при выполнении сканера SonarQube 2018-04-04T07: 00: 51.2906744Z ОШИБКА: каталог C: \ buildagent \ vsts-agent_work \ 19 \ s \ ProjectA должен относиться к проекту baseDir
Похоже, он все еще пытается просканировать весь корневой каталог исходного кода VSTS C:\buildagent\vsts-agent\_work\19\s
, а не только C:\buildagent\vsts-agent\_work\19\s\ProjectB
.
Так что вопрос остается. Как мы можем заставить это работать?