Pytanie Dokonywanie TeamCity zintegrować numer kompilacji Subversion do wersji zespołu


Chcę dostosować dane wyjściowe z mojej konfiguracji kompilacji TeamCity mojej biblioteki klas tak, aby produkowane pliki dll miały następujący numer wersji: 3.5.0.x, gdzie x to numer rewizji subversion, który zdobył TeamCity.

Odkryłem, że mogę używać BUILD_NUMBER zmienna środowiskowa, aby uzyskać x, ale niestety nie rozumiem, co jeszcze muszę zrobić.

"Samouczki", które wszyscy stwierdzam, mówią "po prostu dodajesz to do scenariusza", ale nie mówią który skrypt, a "to" zwykle odnosi się do zadania AssemblyInfo z rozszerzeń społeczności MSBuild.

Czy muszę w jakiś sposób utworzyć niestandardowy skrypt MSBuild, aby go użyć? Czy "skrypt" jest taki sam jak plik rozwiązania lub plik projektu C #?

Nie wiem zbyt wiele o procesie MSBuild, z tym wyjątkiem, że mogę przesłać plik rozwiązania bezpośrednio do MSBuild, ale to, co muszę dodać do "skryptu" to XML, a plik rozwiązania zdecydowanie nie wygląda jak XML.

Czy ktokolwiek może wskazać mi krok po kroku, jak to zrobić?


Oto co otrzymałem:

  1. Zainstaluj Zadania społeczności MSBuild
  2. Edytuj plik .csproj mojej głównej biblioteki klas i zmień dno, tak aby brzmiał:

    <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
    <Target Name="BeforeBuild">
      <AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' "
          CodeLanguage="CS"
          OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs"
          AssemblyVersion="3.5.0.0"
          AssemblyFileVersion="$(BUILD_NUMBER)" />
    </Target>
    <Target Name="AfterBuild">
    

  3. Zmień wszystkie moje pliki AssemblyInfo.cs, aby nie określały wartości AssemblyVersion ani AssemblyFileVersion (z perspektywy czasu, zajrzę do ponownego wprowadzenia AssemblyVersion)

  4. Dodano link do globalnego globalnego GlobalInfo.cs, który znajduje się na zewnątrz całego projektu
  5. Upewnij się, że ten plik jest zbudowany raz, więc mam plik domyślny w kontroli źródła

Spowoduje to aktualizację GlobalInfo.cs tylko wtedy, gdy ustawiona jest zmienna środowiskowa BUILD_NUMBER, która jest tworzona podczas budowania przez TeamCity.

Zdecydowałem się na utrzymanie stałej AssemblyVersion, aby referencje nadal działały i aktualizowały tylko AssemblyFileVersion, dzięki czemu mogę zobaczyć, z której biblioteki powstaje dll.


20
2018-01-08 13:34


pochodzenie




Odpowiedzi:


Plik CSPROJ jest faktycznie plikiem MSBuild.

Zwolnij odpowiedni projekt klasy w VS.NET, edytuj go i odkomentuj BeforeBuild cel. Dodaj FileUpdate Zadanie MSBuild z rozszerzeń społeczności MSBuild.

W pliku MSBuild można pobrać numery BUILD_NUMBER z TeamCity za pomocą zmiennej środowiskowej $(build_vcs_number_1). Zauważ, że możesz chcieć utworzyć dodatkową konfigurację dla "Produkcji", której "stan sprawdzasz, ponieważ to oczywiście nie zadziała, gdy będziesz budować lokalnie.

Po prostu użyj tego jako wejścia dla zadań FileUpdate ReplacementText własność.

Zwróć uwagę, że jeśli numery wersji przekraczają oznaczenie 65535 (UInt16), nie można go używać w AssemblyVersion atrybut.

Zamiast tego sugeruję, żebyś zamiast tego używał AssemblyInformationalVersion, który jest tylko ciągiem, który nie ma tego ograniczenia. O ile oczywiście nie masz pewności, że nie trafisz tej rewizji na wyższą granicę, ale wydaje się to podejrzanym sposobem.

Alternatywnie, możesz zaprojektować sposób (a.b.c.d jest twoim numerem wersji) używania div div wersji 1000 dla c i modyfikacji wersji 1000 dla d.


18
2018-01-08 13:58





W TeamCity 6.5 to jest BARDZO ŁATWE aby osiągnąć użycie InstallInfo patcher.

  • Przejdź do kroku konfiguracji kompilacji 3 "Buduj kroki";
  • Kliknij "Dodaj funkcję budowania";
  • Wybierz typ funkcji "InstallInfo patcher";
  • Wskaż, co chcesz, jako wersję. Używam: %system.build.number%

12
2017-12-09 12:57



Niestety, ich patcher nie obecnie pozwól, aby określić odrębne AssemblyVersion i AssemblyFileVersion wartości. - ladenedge
Twoja sugestia jest bardzo przydatna w scenariuszach, w których głównym problemem jest możliwość śledzenia numeru kompilacji: dzięki! - faester
Facet, miałem zamiar zrobić wiele schematów z kodem Scheiss, tylko po to, żeby wprowadzić ten kod do mojego kodu. Uratowałeś mi 2 lub 3 dni pracy! - Adrian Salazar