Como faço para usar o Travis-CI com C # ou F #

91

O serviço de integração contínua Travis CI oferece suporte oficialmente a vários idiomas , mas não C # ou F #.

Posso usá-lo com meus projetos .net?

jbtule
fonte

Respostas:

16

Travis CI agora oferece suporte a C # . Citando livremente dessa página:

Visão geral

A configuração para projetos C #, F # e Visual Basic é semelhante a esta:

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

Roteiro

Por padrão, o Travis executará xbuild solution-name.sln. Xbuild é uma ferramenta de construção projetada para ser uma implementação da ferramenta MSBuild da Microsoft. Para substituir isso, você pode definir o atributo de script assim:

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

NuGet

Por padrão, o Travis executará nuget restore solution-name.sln, que restaura todos os pacotes NuGet de seu arquivo de solução. Para substituir isso, você pode definir o atributo de instalação assim:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln
danielnixon
fonte
esta é a resposta. Curto e sucinto.
vidstige de
150

Veja a resposta de danielnixon para saber a maneira oficial de fazer isso agora.

É possível.

1. Seu projeto precisa funcionar no Mono

Em sua própria máquina mono, usando o terminal, cdem seu diretório de solução e executando o comando xbuild. Isso pode funcionar automaticamente ou não, pois há recursos que você usou no Visual Studio que precisam de alguns ajustes em mono.

Coisas a serem observadas:

  • Erros de arquivos ausentes, verifique se as maiúsculas e minúsculas dos nomes dos arquivos correspondem ao seu .csprojlinux tem caminhos que diferenciam maiúsculas de minúsculas, onde o Windows não.
  • O Nuget exige que você faça isso export EnableNuGetPackageRestore=trueantes de executar xbuildse o projeto for restaurado automaticamente.
  • Sua instância mono pode não ter certificados SSL raiz, use mozroots --import --syncpara instalá-los.
  • Além disso, se você vir erros de arquivo ausentes, em nuget.*vez de NuGet.*referências em seu .csproj, sabe-se que existem em várias versões do nuget.
  • Há um bug no arquivo de destino do nuget 2.5 com base no espaço em branco no arquivo .target, solução alternativa aqui
  • Para suporte FSharp 3.0, você precisa de mono 3.0.X ou posterior (e pode precisar compilar a partir da fonte, mas instalado por padrão no Mac OS X)
  • Para projetos FSharp do VS2013, pode ser necessário editar o seu .fsprojpara acionar a configuração do VS2012 em máquinas não Windows adicionando '$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'ver exemplo .

Mono 3.1.12, 3.2.4 e posterior

  • Mono 3.1.2, 3.2.4 e posterior têm suporte a pcl, mas também podem ter erros de PCL ausentes. Procure o erro listado abaixo em Mono 3.0.12 , pois inclui apenas as seguintes referências de estrutura:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, aplicativos da 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, aplicativos da Windows Store (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, aplicativos da 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, aplicativos da Windows Store (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, aplicativos da Windows Store (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, aplicativos da Windows Store (Windows 8)
    • v4.0, Profile5 .NET Framework 4, aplicativos da Windows Store (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, aplicativos da Windows Store (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, aplicativos da Windows Store (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, aplicativos da Windows Store (Windows 8)

Mono 3.0.12

  • Mono 3.0.12 tem os alvos para bibliotecas de classes portáteis, mas não os assemblies de referência. Procure as 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.Condições de uso da plataforma (mencionadas em Mono 3.0.11 ou anterior ) ou atualize para 3.1.2.

Mono 3.0.11 ou anterior

  • Erros de destino ausente, se não for nuget, é provavelmente porque você está usando um destino de biblioteca de classe portátil ou outro destino que não existe. Se o seu projeto pode compilar para .net 4.0, você pode modificar seu .csproj ou .fsproj, de modo que em .net ele construa portátil e em mono ele construa para .net 4.0. basicamente por separar as coisas em grupos de propriedades condicionais <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>ou Condition="$(OS) != 'Windows_NT'para mono. Sua milhagem pode variar. Veja o exemplo de trabalho .

Mono 2.10.X

  • Além disso, o Mono v2.10 está faltando algumas de suas classes Microsoft.Build de que o Nuget precisa, você pode copiar a dll v3.0.X, que é muito pequena, para o diretório .nuget. (Eu usei aqui )

2. Ser capaz de executar testes de unidade na linha de comando.

.ci/nunit.shé meu próprio script de shell para teste de nunit, verificado na raiz do repo. Portanto, posso instalar a versão do nunit-console que desejo com o nuget e configurar várias categorias de inclusão / exclusão. Sua milhagem pode variar, mas esta técnica deve funcionar para xunit etc. Ou faça suas próprias coisas com xbuild ou 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. Configure o Travis para mono

Mono v3.8.0

Para testar o mono mais recente, é mais fácil usar hosts Mac (alvo usando language:objective-cMono v3.1.2 e posterior distribuição alterada em um Mac de um DMG para apenas um PKG para que a instalação seja bastante simples. Este modelo deve suportar bibliotecas de classes portáteis, .NET 4.5.1 e 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

Para segmentar Mono v2.10.X e v3.0.X

É fácil usar hosts Mac para configurar uma matriz de construção para várias versões do Mono. Veja o roteiro abaixo

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

Para linux

E agora você deve estar pronto para usar travis em seu projeto c #.

jbtule
fonte
22
Essa é provavelmente uma das melhores respostas que já vi neste site.
Michael Grassman
Oi, estou tentando construir um projeto fx4.5 por Travis CI, mas não sudo installer -pkg. Pode me ajudar a consertar isso? Obrigado! consulte travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast
language: objective-cé necessário para esse modelo, para que ele use o host OS X.
jbtule
Estou recebendo erros CS0246 ("tipo ou nome de namespace não foi encontrado") para ServiceBus, Queue e BrokeredMessage. Alguma ideia?
saiyancoder
@Mati isso é Windows Azure? Não acho que seja compatível com mono, mas aposto que funcionará facilmente em AppVeyor stackoverflow.com/a/19164665/637783
jbtule
25

Esse é o ponto chave - o projeto deve funcionar em Mono. Isso funciona principalmente para projetos do tipo biblioteca ( AWS SDK .NET é um bom exemplo), embora exija mais esforços de desenvolvimento e disciplina. O ambiente de construção do Linux não funcionará se você estiver desenvolvendo um projeto para a plataforma Windows, como aplicativo WPF, serviço de nuvem Azure, aplicativo Windows Phone / Store ou mesmo ASP.NET Web API.

AppVeyor CI é um serviço de integração contínua hospedado para a plataforma Windows e é gratuito para projetos de código aberto. É como o Travis CI para Windows!

Você pode configurar o processo de construção para a solução VS.NET, projeto MSBuild personalizado, PSake ou qualquer script PowerShell de arquivo em lote. Além disso, o AppVeyor possui uma estrutura integrada de gerenciamento e implantação de artefatos.

Feodor Fitsner
fonte
2
@jbtule Embora não seja uma resposta direta à pergunta, ela fornece valor, uma vez que alguns visitantes desta pergunta (eu, por exemplo) podem estar interessados ​​em criar servidores para .net em plataformas mono e MS .net.
steenhulthin
1
Além desta postagem, o wercker lançou recentemente o suporte nativo ao .NET: blog.wercker.com/2013/10/25/…
pjvds
O AppVeyor CI apresenta um erro 503 quando pressiono o link 'inscrever-se'. Não é uma boa primeira impressão ...
Dan Esparza
4
+1 para AppVeyor, recentemente configurei duas definições de compilação para um aplicativo .NET 4.5 e é muito simples de configurar e tem muita flexibilidade. O suporte é muito responsivo também, eu relatei um bug e ele foi corrigido e colocado em produção em menos de 24 horas.
J c
8

Como já mencionado, Travis CI tem suporte beta para C # . É fácil de usar. Além disso, o nunit pode ser integrado facilmente. Aqui está um pequeno exemplo de um arquivo .travis.yml que executa testes nunit e marca o build como com falha se pelo menos um teste de unidade falhar:

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
fonte
Obrigado, usando esta configuração consegui executá-lo no travis pela primeira vez (problema do GH com mais detalhes github.com/o2platform/FluentSharp/issues/… )
Dinis Cruz
Isso me ajudou muito, obrigado! A única coisa que adicionei foi sudo: requiredno final. Funciona como um encanto.
w0ns88,