Я работаю над интеграцией BitBucket
, TeamCity
и SonarQube
. Мой сценарий выглядит следующим образом:
- Разработчик запускает новый PR или изменяет существующий;
TeamCity
начинает строить PR автоматически;
TeamCity
отправляет результаты анализа в SonarQube
через SonarQube Runner с -Dsonar.branch.name=%teamcity.build.branch%
;
BitBucket
запрашивает подробности анализа у SonarQube
по названию филиала и отображает их на странице PR.
Так что проблема в том, что я не могу определить название ветви, на которой основан PR. Вот что происходит:
- Я настраиваю
TeamCity
на прослушивание ссылки +:refs/pull-requests/*/from
в спецификации ветви VCS
;
- Когда
TeamCity
обнаруживает новый PR, он начинает сборку
- Название филиала (
teamcity.build.branch
) становится равным номеру PR (из-за звездочки в ссылке);
BitBucket
не может получить подробности анализа по названию филиала PR, потому что они хранятся в SonarQube
под именем, которое равно номеру PR, а не имени филиала.
Решение 1 (динамические параметры):
- для определения какого-либо динамического параметра;
- для присвоения значения параметру на одном из этапов сборки;
- чтобы использовать это значение для публикации результатов анализа в
SonarQube
.
Решение 2:
- для прослушивания обеих ссылок:
+:refs/pull-requests/*/from
и +:refs/heads/*
;
- для установки
VCS
триггера, который слушает только +:refs/heads/*
;
- для сбоя сборки на первом этапе сборки, если не найдена ссылка на запрос извлечения для текущей ветви.
Не похоже на хорошее решение.
Так что мне кажется, что решение должно быть примерно таким:
- чтобы TeamCity запускала сборку при обнаружении нового PR (как он работает сейчас);
- чтобы определить правильное имя ветви (по хешу коммитов) и сохранить его в динамическом параметре;
- для передачи значения этого параметра в
SonarQube
Runner (-Dsonar.branch.name=%dynamic.branch...%
)
Я прочитал документацию о предопределенных параметрах ветки TeamCity , но не нашел ничего полезного.
Пожалуйста, помогите мне разобраться, как его настроить.