Comment utiliser Travis-CI avec C # ou F #

91

Le service d'intégration continue Travis CI prend officiellement en charge de nombreux langages , mais pas C # ou F #.

Puis-je l'utiliser avec mes projets .net?

jbtule
la source

Réponses:

16

Travis CI prend désormais en charge C # . Citant généreusement à partir de cette page:

Aperçu

La configuration des projets C #, F # et Visual Basic ressemble à ceci:

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

Scénario

Par défaut, Travis exécutera xbuild nom-solution.sln. Xbuild est un outil de construction conçu pour être une implémentation de l'outil MSBuild de Microsoft. Pour remplacer cela, vous pouvez définir l'attribut de script comme ceci:

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

NuGet

Par défaut, Travis exécutera nuget restore solution-name.sln, qui restaure tous les packages NuGet à partir de votre fichier de solution. Pour remplacer cela, vous pouvez définir l'attribut d'installation comme ceci:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
Danielnixon
la source
c'est LA réponse. Court et succinct.
vidstige
150

Voir la réponse de danielnixon pour la manière officielle de le faire maintenant.

C'est possible.

1. Votre projet doit fonctionner sur Mono

Sur votre propre machine mono, en utilisant le terminal, cddans votre répertoire de solution et en exécutant la commande xbuild. Cela peut fonctionner automatiquement, ou non, car certaines fonctionnalités que vous avez utilisées dans Visual Studio nécessitent quelques ajustements en mono.

Choses à surveiller:

  • Erreurs de fichiers manquantes, vérifiez que la casse des noms de fichiers correspond à votre .csprojLinux a des chemins sensibles à la casse là où Windows ne le fait pas.
  • Nuget vous oblige à le faire export EnableNuGetPackageRestore=trueavant de s'exécuter xbuildsi votre projet se rétablit automatiquement.
  • Votre instance mono peut ne pas avoir de certificats SSL racine, utilisez-les mozroots --import --syncpour les installer.
  • De plus, si vous voyez des erreurs de fichiers manquantes, nuget.*au lieu de NuGet.*références dans votre .csproj, on sait qu'elles existent dans différentes versions de nuget.
  • Il y a un bogue dans le fichier cible de nuget 2.5 basé sur les espaces dans le fichier .target, solution de contournement ici
  • Pour la prise en charge de FSharp 3.0, vous avez besoin de mono 3.0.X ou version ultérieure (et vous devrez peut-être construire à partir des sources, mais installé par défaut sur Mac OS X)
  • Pour les projets FSharp de VS2013, vous devrez peut-être modifier votre .fsprojpour déclencher la configuration VS2012 sur des machines non Windows en ajoutant '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'voir l' exemple .

Mono 3.1.12, 3.2.4 et versions ultérieures

  • Mono 3.1.2, 3.2.4 et versions ultérieures prennent en charge pcl, mais peuvent également avoir les erreurs PCL manquantes. Recherchez l'erreur répertoriée ci-dessous sous Mono 3.0.12 car elle inclut uniquement les références de cadre suivantes:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, applications Windows Store (Windows 8)
    • v4.0, Profile14 .NET Framework 4, Silverlight 5
    • v4.0, Profile147 .NET Framework 4.0.3, Silverlight 5, Windows Phone 8, applications Windows Store (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, applications Windows Store (Windows 8)
    • v4.0, Profile19 .NET Framework 4.0.3, Silverlight 5
    • v4.0, Profile24 .NET Framework 4.5, Silverlight 5
    • v4.0, Profile37 .NET Framework 4, Silverlight 5, applications du Windows Store (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, applications du Windows Store (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, applications du Windows Store (Windows 8)
    • v4.0, Profile5 .NET Framework 4, applications du Windows Store (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, applications du Windows Store (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, applications du Windows Store (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, applications du Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 a les cibles pour les bibliothèques de classes portables mais pas les assemblys de référence. Recherchez les conditions d' 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.utilisation de la plate-forme (mentionnées sous Mono 3.0.11 ou version antérieure ) ou passez à la version 3.1.2.

Mono 3.0.11 ou version antérieure

  • Erreurs de cible manquante, si ce n'est pas nuget, c'est probablement parce que vous utilisez une cible de bibliothèque de classes portable ou une autre cible qui n'existe pas. Si votre projet peut compiler pour .net 4.0, vous pouvez modifier votre .csproj ou .fsproj, de sorte que sur .net, il soit portable et sur mono, il soit pour .net 4.0. essentiellement par des choses séparées dans des groupes de propriétés conditionnelles <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>ou Condition="$(OS) != 'Windows_NT'pour mono. Votre kilométrage peut varier. Voir l' exemple de travail .

Mono 2.10.X

  • De plus, Mono v2.10 manque certaines de ses classes Microsoft.Build dont Nuget a besoin, vous pouvez copier la dll v3.0.X, qui est très petite, dans le répertoire .nuget. (Je l'ai utilisé ici )

2. Être capable d'exécuter des tests unitaires à partir de la ligne de commande.

.ci/nunit.shest mon propre script shell pour les tests de nunit, vérifié à la racine du dépôt. Je peux donc installer la version nunit-console que je veux avec nuget, et configurer également divers types d'inclusion / exclusion de catégories. Votre kilométrage peut varier, mais cette technique devrait fonctionner pour xunit, etc. Ou faites votre propre truc avec xbuild ou faux .

.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. Configurer Travis pour mono

Mono v3.8.0

Pour tester le dernier mono, il est plus facile d'utiliser des hôtes Mac (cible en utilisant language:objective-cMono v3.1.2 et plus tard, a changé la distribution sur un Mac d'un DMG à juste un PKG afin que l'installation soit assez simple. Ce modèle doit prendre en charge les bibliothèques de classes portables, .NET 4.5.1 et 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

Pour cibler à la fois Mono v2.10.X et v3.0.X

Il est facile d'utiliser des hôtes Mac pour configurer une matrice de construction pour plusieurs versions de Mono. Voir le script ci-dessous

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

Pour Linux

Et maintenant, vous devriez être prêt à utiliser travis sur votre projet c #.

jbtule
la source
22
C'est probablement l'une des meilleures réponses que j'aie jamais vues sur ce site.
Michael Grassman
Salut, j'essaye de construire un projet fx4.5 par Travis CI, mais pas sudo installer -pkg. Pourriez-vous m'aider à résoudre ce problème? Je vous remercie! voir, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-cest nécessaire pour ce modèle, afin qu'il utilise l'hôte OS X.
jbtule
J'obtiens des erreurs CS0246 ("le type ou le nom de l'espace de noms est introuvable") pour ServiceBus, Queue et BrokeredMessage. Des idées?
saiyancoder
@Mati est-ce que Windows Azure? Je ne pense pas que ce soit compatible mono, mais je parie que cela fonctionnera facilement sur AppVeyor stackoverflow.com/a/19164665/637783
jbtule
25

C'est le point clé - le projet doit fonctionner sur Mono. Cela fonctionne principalement pour les projets de style bibliothèque ( AWS SDK .NET en est un bon exemple), mais nécessite plus d'efforts de développement et de discipline. L'environnement de construction Linux ne fonctionnera pas si vous développez un projet pour la plate-forme Windows tel qu'une application WPF, un service cloud Azure, une application Windows Phone / Store ou même une API Web ASP.NET.

AppVeyor CI est un service d'intégration continue hébergé pour la plate-forme Windows et il est gratuit pour les projets open source. C'est comme Travis CI pour Windows!

Vous pouvez configurer le processus de génération pour la solution VS.NET, le projet MSBuild personnalisé, PSake ou tout script PowerShell du fichier de commandes. En outre, AppVeyor dispose d'un cadre intégré de gestion et de déploiement des artefacts.

Feodor Fitsner
la source
2
@jbtule Bien que ce ne soit pas une réponse directe à la question, il apporte de la valeur, car certains visiteurs de cette question (moi par exemple) peuvent être intéressés à la fois par le serveur de construction pour .net sur les plates-formes mono et MS .net.
steenhulthin
1
En plus de cet article, wercker a récemment lancé le support natif .NET: blog.wercker.com/2013/10/25
...
AppVeyor CI me donne une erreur 503 lorsque j'appuie sur le lien «inscription». Pas une bonne première impression ...
Dan Esparza
4
+1 pour AppVeyor, j'ai récemment configuré deux définitions de build pour une application .NET 4.5 et il est très simple à configurer et offre beaucoup de flexibilité. Le support est également très réactif, j'ai signalé un bug et il a été corrigé et mis en production en moins de 24 heures.
J c
8

Comme déjà mentionné, Travis CI a un support bêta pour C # . Je suis simple à utiliser. La nunit peut également être intégrée très facilement. Voici un petit exemple de fichier .travis.yml qui exécute des tests nunit et marque la construction comme échouée si au moins un test unitaire échoue:

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
la source
Merci, en utilisant cette configuration, j'ai pu l'exécuter sur travis pour la première fois (problème GH avec plus de détails github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz
Cela m'a beaucoup aidé, merci! La seule chose que j'ai ajoutée était sudo: requiredà la fin. Fonctionne comme un charme.
w0ns88