2014-10-25 21 views
5

Właśnie skonfigurowałem TeamCity, aby zautomatyzować nasze kompilacje, nasze obecne rozwiązanie ma zarówno dev, jak i główną gałąź. Próbuję osiągnąć to, że gałąź rozwojowa będzie budować i publikować na kanale NuGet dla rozwoju w naszej instalacji ProGet, a następnie opublikować główną gałąź w naszym głównym strumieniu NuGet na serwerze ProGet.Publikowanie pakietów NuGet - TeamCity

Używamy wdrożenia ośmiornic do wdrożenia pakietów, w TeamCity mamy zainstalowaną wtyczkę Octopus i jeśli zaznaczę pole do uruchomienia OctoPack, buduje pakiety i pojawiają się one jako artefakty po zakończeniu kompilacji. Gdy próbuję użyć Nuget Pakiet budować krok w TeamCity pojawia się następujący błąd dla jednego z naszych projektów:

[08:33:49] :   [pack] Attempting to build package from 'xxx.csproj'. 
[08:33:50]W:   [pack] Unable to find 'xxx.exe'. Make sure the project has been built. 

Projekt został zbudowany i działa z OctoPack więc dlaczego nie jest to praca z Nuget Pakiet? Tworzymy pięć projektów, a pierwsze cztery działają dobrze, jedna to aplikacja konsolowa, jedna to strona internetowa mvc, a dwie to biblioteki klas. Ten, który nie działa, jest usługą Windows.

Ostatecznym celem jest opublikowanie tych pakietów w prywatnym pliku danych w ProGet. Nie mam nic przeciwko używaniu OctoPack, ale w mojej głowie chciałem usunąć tę zależność od TeamCity, ale mogę z tym żyć. Jednak, kiedy próbuję użyć typu runnera NuGet Publish, jak wybrać publikowanie artefaktów NuGet, które zostały utworzone?

Byłem googling jak szalony i nie mogę znaleźć żadnych pomocnych linków, które opisują to, co masz wprowadzić, Byłbym wdzięczny za wszelkie pomocne komentarze/odpowiedzi.

Używamy wersji 8.15 TeamCity.

+0

Jakie argumenty przechodzisz do 'pakietu nuget'? Wygląda na to, że jest tu wiele pytań, możesz rozważyć ich podzielenie, aby były mniej powiązane. Najlepsze pytania dotyczące przepełnienia stosu to te, które mogą pomóc także innym osobom. –

+0

To trochę inne podejście, ale ponieważ chcesz uprościć swoje podejście do wdrażania, a co dopiero wdrożyć bezpośrednio z TeamCity? [BuildMaster] (http://inedo.com/buildmaster/extensions/teamcity) może importować i wdrażać swoje kompilacje TeamCity bez potrzeby angażowania w to NuGeta. Zastrzeżenie: pracuję dla inedo. –

Odpowiedz

9

Mamy nadzieję, że poniższe informacje pomogą ci w przynajmniej części Twojego pytania; głównie ten fragment dotyczący sposobu publikowania zapakowanych artefaktów.

NuSpec Podejście

Przy użyciu krok NuGet Pack kompilacji, można określić Output Directory, który określi położenie wyjściowe pakietów. Możesz określić to jako względną ścieżkę do katalogu kasy, prawdopodobnie najlepiej zdefiniować go jako parametr kompilacji, taki jak %system.PackageDeployOutput%, ponieważ będziesz go używał w następnym kroku ...:

Następnie określ NuGet Publish budować krok, wypełnij klucza pakietu źródłowego/API etc, i określić Pakiety przesłać jako

%system.PackageDeployOutput%\*.nupkg

Pozwoli to podnieść produkcję opakowań w poprzednim kroku. Używałem tego dość skutecznie, a metoda parametryzacji zachęca konwencje we wszystkich twoich kompilacjach.

Pomoc OctoPack

Jeśli używasz msbuild build krok z OctoPack, można użyć podobnego podejścia deklarując parametr systemowy o nazwie

system.OctoPackPublishPackageToFileShare = %teamcity.build.checkoutDir%\%system.PackageDeployOutput%(uwaga ta sama parametr jak wyżej)

Możesz zadeklarować je jako parametry projektu root, dzięki czemu uzyskasz obu światów.Moje preferowane podejście do pakowania wykorzystuje obecnie pliki Nuspec do rozmieszczania punktów końcowych. Zauważyłem, że OctoPack jest nieco obciążony, jeśli chodzi o bardziej złożone wdrożenia (jest to dobre dla podstawowych projektów MsBuild).