Jak używać Travis-CI z C # lub F #

92

Usługa ciągłej integracji Travis CI oficjalnie obsługuje wiele języków , ale nie C # ani F #.

Czy mogę go używać z moimi projektami .net?

jbtule
źródło

Odpowiedzi:

16

Travis CI obsługuje teraz język C # . Cytując swobodnie z tej strony:

Przegląd

Konfiguracja projektów C #, F # i Visual Basic wygląda następująco:

language: csharp
solution: solution-name.sln
mono:
  - latest
  - 3.12.0
  - 3.10.0

Scenariusz

Domyślnie Travis uruchomi xbuild nazwa-rozwiązania.sln. Xbuild to narzędzie do kompilacji zaprojektowane jako implementacja dla narzędzia Microsoft MSBuild. Aby to zmienić, możesz ustawić atrybut skryptu w następujący sposób:

language: csharp
solution: solution-name.sln
script: ./build.sh

NuGet

Domyślnie Travis uruchomi nuget restore solution-name.sln, który przywraca wszystkie pakiety NuGet z pliku rozwiązania. Aby to zmienić, możesz ustawić atrybut instalacji w następujący sposób:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
danielnixon
źródło
to jest odpowiedź. Krótkie i zwięzłe.
vidstige
150

Zobacz odpowiedź danielnixon aby jak to zrobić teraz.

To jest możliwe.

1. Twój projekt musi działać na Mono

Na własnej maszynie mono, używając terminala, cddo katalogu rozwiązania i uruchamiając polecenie xbuild. Może to działać automatycznie lub nie, ponieważ istnieją funkcje używane w Visual Studio, które wymagają pewnych poprawek w trybie mono.

Na co zwrócić uwagę:

  • Błędy brakujących plików, sprawdź, czy wielkość liter w nazwach plików jest zgodna z Twoim .csprojlinuxem, w ścieżkach rozróżniających wielkość liter, w których okna nie są.
  • Nuget wymaga tego export EnableNuGetPackageRestore=trueprzed uruchomieniem, xbuildjeśli projekt zostanie automatycznie przywrócony.
  • Twoja instancja mono może nie mieć głównych certyfikatów SSL. Użyj, mozroots --import --syncaby je zainstalować.
  • Również jeśli widzisz błędy brakujących plików, nuget.*zamiastNuGet.* odwołań w pliku .csproj były znane w różnych wersjach nuget.
  • Istnieje błąd w pliku docelowym 2.5 NuGet oparty na białych znakach w pliku docelowym, obejście tutaj
  • Do obsługi FSharp 3.0 potrzebujesz mono 3.0.X lub nowszego (i może być konieczne kompilowanie ze źródła, ale domyślnie instalowane w systemie Mac OS X)
  • W przypadku projektów FSharp z VS2013 może być konieczna edycja w .fsprojcelu wyzwolenia konfiguracji VS2012 na komputerach bez systemu Windows, dodając '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'zobacz przykład .

Mono 3.1.12, 3.2.4 i nowsze

  • Mono 3.1.2, 3.2.4 i nowsze obsługują pcl, ale mogą również zawierać brakujące błędy PCL. Zwróć uwagę na błąd wymieniony poniżej w Mono 3.0.12, ponieważ zawiera on tylko następujące odwołania do struktury:
    • Wersja 4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, aplikacje Windows Store (Windows 8)
    • Wersja 4.0, Profile14 .NET Framework 4, Silverlight 5
    • Wersja 4.0, Profile147 .NET Framework 4.0.3, Silverlight 5, Windows Phone 8, aplikacje Windows Store (Windows 8)
    • Wersja 4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, aplikacje Windows Store (Windows 8)
    • Wersja 4.0, Profile19 .NET Framework 4.0.3, Silverlight 5
    • Wersja 4.0, Profile24 .NET Framework 4.5, Silverlight 5
    • Wersja 4.0, Profile37 .NET Framework 4, Silverlight 5, aplikacje ze Sklepu Windows (Windows 8)
    • Wersja 4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, aplikacje Windows Store (Windows 8)
    • Wersja 4.0, Profile47 .NET Framework 4.5, Silverlight 5, aplikacje ze Sklepu Windows (Windows 8)
    • v4.0, Profile5 .NET Framework 4, aplikacje Windows Store (Windows 8)
    • Wersja 4.0, Profile6 .NET Framework 4.0.3, aplikacje ze Sklepu Windows (Windows 8)
    • Wersja 4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, aplikacje ze Sklepu Windows (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, aplikacje Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 ma cele dla przenośnych bibliotek klas, ale nie ma zestawów referencyjnych. Poszukaj Unable to find framework corresponding to the target framework moniker '.NETPortable,Version=v4.0,Profile=ProfileX'. Framework assembly references will be resolved from the GAC, which might not be the intended behavior.warunków korzystania z platformy (wymienionych w Mono 3.0.11 lub wcześniejszych ) lub zaktualizuj do wersji 3.1.2.

Mono 3.0.11 lub wcześniejsza

  • Brakujące błędy docelowe, jeśli nie jest to nuget, prawdopodobnie jest to spowodowane korzystaniem z przenośnego celu biblioteki klas lub innego celu, który nie istnieje. Jeśli twój projekt może skompilować się dla .net 4.0, możesz zmodyfikować .csproj lub .fsproj, aby na .net budował przenośne, a mono budował dla .net 4.0. zasadniczo przez rozdzielenie rzeczy na warunkowe grupy właściwości <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>lub Condition="$(OS) != 'Windows_NT'na mono. Twój przebieg może się różnić. Zobacz przykład roboczy .

Mono 2.10.X

  • Również Mono v2.10 brakuje niektórych klas Microsoft.Build, których potrzebuje Nuget, możesz skopiować plik dll v3.0.X, który jest bardzo mały, do katalogu .nuget. (Użyłem go tutaj )

2. Umiejętność uruchamiania testów jednostkowych z wiersza poleceń.

.ci/nunit.shto mój własny skrypt powłoki do testowania nunitów, sprawdzony w katalogu głównym repozytorium. Mogę więc zainstalować wersję nunit-console, którą chcę, z nuget, i skonfigurować różne włączanie / wykluczanie kategorii. Twój przebieg może się różnić, ale ta technika powinna działać dla xunit itp. Lub rób swoje z xbuild lub fake .

.ci / nunit.sh

#!/bin/sh -x

mono --runtime=v4.0 .nuget/NuGet.exe install NUnit.Runners -Version 2.6.1 -o packages

runTest(){
    mono --runtime=v4.0 packages/NUnit.Runners.2.6.1/tools/nunit-console.exe -noxml -nodots -labels -stoponerror $@
   if [ $? -ne 0 ]
   then   
     exit 1
   fi
}

#This is the call that runs the tests and adds tweakable arguments.
#In this case I'm excluding tests I categorized for performance.
runTest $1 -exclude=Performance

exit $?

3. Skonfiguruj Travisa na tryb monofoniczny

Mono v3.8.0

Do testowania najnowszego mono najłatwiej jest użyć hostów Mac (docelowo za pomocą language:objective-cMono v3.1.2 i później zmieniono dystrybucję na Mac z DMG na tylko PKG, więc instalacja jest dość prosta. Ten szablon powinien obsługiwać przenośne biblioteki klas, .NET 4.5.1 i FSharp 3.1.

language: objective-c

env:
 global:
  - EnableNuGetPackageRestore=true 
 matrix:
  - MONO_VERSION="3.8.0"

before_install:
 - wget "http://download.mono-project.com/archive/${MONO_VERSION}/macos-10-x86/MonoFramework-MDK-${MONO_VERSION}.macos10.xamarin.x86.pkg"
 - sudo installer -pkg "MonoFramework-MDK-${MONO_VERSION}.macos10.xamarin.x86.pkg" -target /

script:
 - xbuild 
 - .ci/nunit.sh Tests/bin/Debug/Tests.dll

Kierowanie na Mono v2.10.X i v3.0.X

Jestem łatwy w użyciu hostów Mac, aby skonfigurować macierz kompilacji dla wielu wersji Mono. Zobacz skrypt poniżej

language: objective-c

env:
 global:
  - EnableNuGetPackageRestore=true 
 matrix:
  - MONO_VER="2.10.11"
  - MONO_VER="3.0.12"

before_install:
 - wget "http://download.mono-project.com/archive/${MONO_VER}/macos-10-x86/MonoFramework-MDK-${MONO_VER}.macos10.xamarin.x86.dmg"
 - hdid "MonoFramework-MDK-${MONO_VER}.macos10.xamarin.x86.dmg"
 - sudo installer -pkg "/Volumes/Mono Framework MDK ${MONO_VER}/MonoFramework-MDK-${MONO_VER}.macos10.xamarin.x86.pkg" -target /

script:
 - xbuild 
 - .ci/nunit.sh Tests/bin/Debug/Tests.dll

W przypadku systemu Linux

A teraz powinno być dobrze, aby przejść do korzystania z programu Travis w projekcie C #.

jbtule
źródło
22
To prawdopodobnie jedna z najlepszych odpowiedzi, jakie kiedykolwiek widziałem na tej stronie.
Michael Grassman
Cześć, próbuję zbudować projekt fx4.5 przez Travisa CI, ale nie sudo installer -pkg. Czy mógłbyś mi pomóc to naprawić? Dziękuję Ci! patrz, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-cjest niezbędny dla tego szablonu, aby korzystał z hosta OS X.
jbtule
Otrzymuję błędy CS0246 („Nie można znaleźć typu lub nazwy przestrzeni nazw”) dla ServiceBus, Queue i BrokeredMessage. Jakieś pomysły?
saiyancoder
@Mati czy to Windows Azure? Nie sądzę, że jest kompatybilny z monofonicznym, ale założę się, że będzie działał z łatwością na stosie AppVeyor stackoverflow.com/a/19164665/637783
jbtule
25

To jest kluczowy punkt - projekt musi działać na Mono. Działa to głównie w przypadku projektów w stylu bibliotecznym ( dobrym przykładem jest AWS SDK .NET ), chociaż wymaga więcej wysiłku programistycznego i dyscypliny. Środowisko budowlane Linux nie będzie działać, jeśli tworzysz projekt dla platformy Windows, takiej jak aplikacja WPF, usługa w chmurze Azure, aplikacja Windows Phone / Store lub nawet ASP.NET Web API.

AppVeyor CI to hostowana usługa ciągłej integracji dla platformy Windows i jest bezpłatna dla projektów open source. To jak Travis CI dla Windows!

Możesz skonfigurować proces kompilacji dla rozwiązania VS.NET, niestandardowego projektu MSBuild, PSake lub dowolnego skryptu programu PowerShell w pliku wsadowym. Poza tym AppVeyor ma wbudowane zarządzanie artefaktami i ramy wdrażania.

Feodor Fitsner
źródło
2
@jbtule Chociaż nie jest to bezpośrednia odpowiedź na pytanie, dostarcza wartości, ponieważ niektórzy odwiedzający to pytanie (na przykład ja) mogą być zainteresowani zarówno budowaniem serwera dla .net, jak i platformą mono i MS .net.
steenhulthin
1
Oprócz tego postu firma wercker niedawno uruchomiła również natywną obsługę platformy .NET: blog.wercker.com/2013/10/25/ ...
pjvds
AppVeyor CI wyświetla mi błąd 503, kiedy naciskam łącze „zarejestruj się”. Niezbyt dobre pierwsze wrażenie ...
Dan Esparza
4
+1 dla AppVeyor, ostatnio skonfigurowałem dwie definicje kompilacji dla aplikacji .NET 4.5 i jest bardzo prosta w konfiguracji i ma dużą elastyczność. Wsparcie jest również bardzo responsywne, zgłosiłem błąd, który został naprawiony i wysłany do produkcji w mniej niż 24 godziny.
J c
8

Jak już wspomniano, Travis CI obsługuje wersję beta dla języka C # . Nie jest łatwy w użyciu. Również nunit można bardzo łatwo zintegrować. Oto mały przykład pliku .travis.yml, który uruchamia testy nunit i oznacza kompilację jako nieudaną, jeśli przynajmniej jeden test jednostkowy nie powiedzie się:

language: csharp
solution: ./src/yoursolution.sln

install:
  - sudo apt-get install nunit-console
  - nuget restore ./src/yoursolution.sln

script:
  - xbuild ./src/yoursolution.sln
  - nunit-console ./src/SomeLibrary.Tests/bin/Debug/SomeLibrary.Tests.dll
Roemer
źródło
Dzięki, używając tej konfiguracji mogłem uruchomić go na travisie po raz pierwszy (problem z GH ze szczegółami github.com/o2platform/FluentSharp/issues/ ... )
Dinis Cruz
To bardzo mi pomogło, dzięki! Jedyne, co dodałem, to sudo: requiredna końcu. Działa jak marzenie.
w0ns88