TeamCity mówi, aby użyć „Parametry kompilacji” zamiast „/ property:” w kroku MSBuild. Co to znaczy?

80

Mam konfigurację serwera TeamCity do tworzenia moich kompilacji CI. Buduję i testuję rozwiązanie C # i uruchamiam niektóre niestandardowe zadania programu MSBuild. Jednym z tych zadań jest drukowanie ostrzeżenia w wynikach kompilacji ...

Parametry wiersza polecenia programu MSBuild zawierają parametry „/ property:” lub „/ p:”. Zamiast tego użyj parametrów kompilacji.

Nie rozumiem, co to oznacza i jak to usunąć. Nie Google dobrze (z literówką lub bez). Uruchomiłem zadanie z wiersza poleceń (z /verbosity:diagnostic) i nie pojawia się, więc uważam, że jest to wiadomość TeamCity.

Zadaniem programu MSBuild jest

<Target Name="InstallDb">
  <MakeDir Directories="$(DbPath)" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseDrop.sql" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseCreate.sql -v DbPath=&quot;$(DbPath)&quot;" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseProgrammability.sql" />
</Target>

A odpowiednie informacje o krokach TeamCity to

Wersja MSBuild: 4.0
MSBuild ToolsVersion: 4.0
Uruchom platformę: x64
Cele: InstallDb
Parametry wiersza polecenia: /property:DbPath=%env.DB_PATH%

Anthony Mastrean
źródło
5
@AnneTheAgile wystarczy dodać parametr kompilacji systemu TeamCity . To jeden z trzech wymienionych typów parametrów kompilacji. Nazywasz go jak „system. <nazwa-moj-parametr-budowy>” i podajesz żądaną wartość. TeamCity automatycznie wyśle ​​go do MSBuild. Możesz sprawdzić wartość parametru w raporcie kompilacji. Jest zakładka dla parametrów, gdzie wszystkie są wymienione.
Anthony Mastrean

Odpowiedzi:

58

Musisz dodać Build Parameterspod Properties and environmentzmienne w konfiguracji

`wprowadź opis obrazu tutaj

Więc w parametrach wiersza polecenia w Build Stepfor MSBUild usuń wszystkie właściwości określone jako /p:i dodaj każdą z nich do Build Parameters(zrzut ekranu powyżej) i podaj wartości

manojlds
źródło
5
@Anthony Mastrean Yeah -Build parameters are passed to a build. Build parameters can be of two types: system properties and environment variables. Environment variables are supported by any build runner, however system properties are only available for build runners with property notion. For example, Command line runner does not support properties.
manojlds
8
Dzięki! To zadziałało, ale musiałem odwiedzić ten dokument, aby naprawdę zrozumieć implementację / użycie.
Anthony Mastrean
2
z dokumentacji miasta zespołu: parametry konfiguracji umożliwiają zastąpienie niektórych ustawień w konfiguracji kompilacji odziedziczonych z szablonu. Nigdy nie są przekazywane do kompilacji.
topwik
8
Wydaje się, że jest to problem, jeśli masz dwa kroki programu MSBuild w tej samej konfiguracji kompilacji, które używają tego samego parametru, ale różnych wartości. Jeśli trzeba je zdefiniować na poziomie „Konfiguracja kompilacji”, wygląda na to, że niemożliwe jest przekazanie różnych wartości tego samego parametru do kroku kompilacji.
TSmith
2
Byłoby świetnie. Z wyjątkiem tego, że to błąd. A co, jeśli chcesz, aby różne parametry były przekazywane do dwóch różnych kroków kompilacji, które mają tę samą nazwę parametru?
Doug
39

To wszystko dzieje się za kulisami! Musisz tylko przestrzegać odpowiednich konwencji. W skrypcie MSBuild używasz zwykłej notacji zmiennej

$(DbPath)

W TeamCity definiujesz zmienną systemową lub środowiskową

system.DbPath

TeamCity automatycznie wyśle ​​wszystkie swoje zmienne systemowe / env do zadania MSBuild, usuwając część „system” lub „env”. I nie musisz pisać /property:DbPath=system.DbPathw swoim zadaniu TeamCity.

Anthony Mastrean
źródło
Zgodnie z dokumentacją , tylko zmienne systemowe są wstrzykiwane do skryptów.
ladenedge
1
Jak rozumiem, zmienne środowiskowe są ustawiane jako rzeczywiste zmienne środowiskowe w agencie kompilacji. Chociaż mogą nie zostać przekazane do skryptu / kroku kompilacji, tak jak zmienne systemowe, są dostępne do użycia. MSBuild musi używać zmiennych środowiskowych, aby podać wartości, $(MyVar)ponieważ mam zmienną środowiska TeamCity, która zapewnia wartość dla głupkowatego narzędzia wiersza polecenia cmd, które wywołuję z MSBuild.
Anthony Mastrean