मैं C # या F # के साथ ट्रैविस-सीआई का उपयोग कैसे करूं


91

ट्रैविस CI निरंतर एकीकरण सेवा आधिकारिक तौर पर कई भाषाओं का समर्थन करती है , लेकिन सी # या एफ # नहीं।

क्या मैं इसे अपने .net प्रोजेक्ट्स के साथ उपयोग कर सकता हूं?

जवाबों:


16

ट्रैविस सीआई अब C # का समर्थन करता है । उस पृष्ठ से उदारतापूर्वक उद्धरण देते हुए:

अवलोकन

C #, F #, और Visual Basic प्रोजेक्ट के लिए सेटअप इस तरह दिखता है:

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

लिपि

डिफ़ॉल्ट रूप से ट्रैविस xbuild समाधान- name.sln चलाएगा। Xbuild एक बिल्ड टूल है जिसे Microsoft के MSBuild टूल के कार्यान्वयन के लिए डिज़ाइन किया गया है। इसे ओवरराइड करने के लिए, आप स्क्रिप्ट विशेषता को इस तरह सेट कर सकते हैं:

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

NuGet

डिफ़ॉल्ट रूप से, ट्रैविस नगेट रिस्टोर सॉल्यूशन- name.sln चलाएगा, जो आपकी सॉल्यूशन फाइल से सभी नूगेट पैकेज को पुनर्स्थापित करता है। इसे ओवरराइड करने के लिए, आप स्थापित विशेषता को इस तरह सेट कर सकते हैं:

language: csharp
solution: solution-name.sln
install:
  - sudo dosomething
  - nuget restore solution-name.sln

यह उत्तर है। छोटी और रसीली।
vidstige

150

देखें डैनियलिक्सन का जवाबऐसा करने के लिए आधिकारिक तरीके के लिए ।

हो सकता है।

1. आपकी परियोजना को मोनो पर काम करने की आवश्यकता है

अपने स्वयं के मोनो मशीन पर, टर्मिनल का उपयोग करके, cdअपने समाधान निर्देशिका में और कमांड चला रहे हैं xbuild। यह स्वचालित रूप से काम कर सकता है, या यह नहीं हो सकता है, क्योंकि दृश्य स्टूडियो में आपके द्वारा उपयोग की जाने वाली विशेषताएं हैं जिन्हें मोनो में कुछ ट्विकिंग की आवश्यकता होती है।

देखने के लिए चीजें:

  • फ़ाइल की गलतियाँ गुम होना, यह सुनिश्चित करने के लिए जाँचें कि फ़ाइल नामों का मामला आपके से मेल खाता है या नहीं .csproj लिनक्स का मामला है या नहीं।
  • दौड़ने से export EnableNuGetPackageRestore=trueपहले Nuget की आवश्यकता होती हैxbuildयदि आपका प्रोजेक्ट ऑटो ।
  • आपके मोनो उदाहरण में रूट एसएसएल प्रमाणपत्र नहीं हो सकता है, उपयोग करें mozroots --import --sync उन्हें स्थापित करने के लिए करें।
  • इसके अलावा, यदि आप फ़ाइल त्रुटियों को देख रहे हैं, तो nuget.*इसके बजायNuGet.* अपने .csproj में संदर्भों के तो वे nuget के विभिन्न संस्करणों में मौजूद हैं।
  • यहां .getget फ़ाइल, वर्कअराउंड में व्हॉट्सएप पर आधारित 2.5 नगेट की लक्ष्य फ़ाइल में एक बग है
  • FSharp 3.0 समर्थन के लिए आपको मोनो 3.0.X या बाद की आवश्यकता है (और स्रोत से निर्माण करने की आवश्यकता हो सकती है, लेकिन डिफ़ॉल्ट रूप से ओएस ओएस पर स्थापित)
  • VS2013 से FSharp परियोजनाओं के लिए, आपको अपने उदाहरण देखने के लिए.fsproj गैर-विंडोज़ मशीनों पर VS2012 कॉन्फ़िगरेशन को ट्रिगर करने के लिए अपने संपादन को संपादित करने की आवश्यकता हो सकती है ।'$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'

मोनो 3.1.12, 3.2.4 और बाद में

  • मोनो 3.1.2, 3.2.4 और बाद में pcl का समर्थन है, लेकिन इसमें पीसीएल की गलतियाँ भी हो सकती हैं। मोनो 3.0.12 के तहत नीचे सूचीबद्ध त्रुटि के लिए देखें क्योंकि इसमें केवल निम्नलिखित रूपरेखा संदर्भ शामिल हैं:
    • v4.0, Profile136 .NET फ्रेमवर्क 4, सिल्वरलाइट 5, विंडोज फोन 8, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile14 .NET फ्रेमवर्क 4, सिल्वरलाइट 5
    • v4.0, Profile147 .NET फ्रेमवर्क 4.0.3, सिल्वरलाइट 5, विंडोज फोन 8, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile158 .NET फ्रेमवर्क 4.5, सिल्वरलाइट 5, विंडोज फोन 8, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile19 .NET फ्रेमवर्क 4.0.3, सिल्वरलाइट 5
    • v4.0, Profile24 .NET फ्रेमवर्क 4.5, सिल्वरलाइट 5
    • v4.0, Profile37 .NET फ्रेमवर्क 4, सिल्वरलाइट 5, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile42 .NET फ्रेमवर्क 4.0.3, सिल्वरलाइट 5, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile47 .NET फ्रेमवर्क 4.5, सिल्वरलाइट 5, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile5 .NET फ्रेमवर्क 4, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.0, Profile6 .NET फ्रेमवर्क 4.0.3, विंडोज स्टोर एप्लिकेशन (विंडोज 8)
    • v4.5, Profile49 .NET फ्रेमवर्क 4.5, विंडोज फोन 8
    • v4.5, Profile7 .NET फ्रेमवर्क 4.5, विंडोज स्टोर एप्स (विंडोज 8)
    • v4.5, Profile78 .NET फ्रेमवर्क 4.5, विंडोज फोन 8, विंडोज स्टोर एप्स (विंडोज 8)

मोनो 3.0.12

  • मोनो 3.0.12 में पोर्टेबल क्लास लाइब्रेरीज़ के लिए लक्ष्य हैं, लेकिन संदर्भ असेंबली नहीं। के लिए देखो 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.उपयोग प्लेटफार्म शर्तों (के तहत उल्लेख किया पहले मोनो 3.0.11 या ) या 3.1.2 में अपग्रेड करें।

मोनो 3.0.11 या इससे पहले

  • मिसिंग टारगेट एरर, अगर यह नौगट नहीं है, तो यह शायद इसलिए है क्योंकि आप पोर्टेबल क्लास लाइब्रेरी टारगेट या अन्य टारगेट का उपयोग कर रहे हैं जो मौजूद नहीं है। यदि आपकी परियोजना .net 4.0 के लिए संकलन कर सकती है, तो आप अपने .csproj या .fsproj को संशोधित कर सकते हैं, ताकि .net पर यह पोर्टेबल और मोनो पर यह .net 4.0 के लिए बनाता है। मूल रूप से सशर्त संपत्ति समूहों में <PropertyGroup Condition="$(OS) == 'Windows_NT'"> <TargetFrameworkProfile>Profile46</TargetFrameworkProfile> </PropertyGroup>या Condition="$(OS) != 'Windows_NT'मोनो के लिए अलग-अलग चीजों द्वारा । आपकी माइलेज भिन्न हो सकती है। काम का उदाहरण देखें ।

मोनो 2.10.X

  • इसके अलावा मोनो v2.10 में से कुछ गायब है। Microsoft.Build कक्षाएं जिन्हें नुगेट की आवश्यकता है, आप v3.0.X dll की प्रतिलिपि बना सकते हैं, जो कि .nuget निर्देशिका के लिए बहुत छोटा है। (मैंने इसे यहाँ इस्तेमाल किया है )

2. कमांड लाइन से यूनिट टेस्ट चलाने में सक्षम हो।

.ci/nunit.shननिट परीक्षण के लिए मेरी खुद की शेल स्क्रिप्ट है, जिसे रेपो की जड़ में जांचा गया है। इसलिए मैं nugit-कंसोल संस्करण को मैं nuget के साथ स्थापित कर सकता हूं, और श्रेणियों के विभिन्न शामिल / बाहर भी कॉन्फ़िगर कर सकता हूं। आपका माइलेज अलग-अलग हो सकता है, लेकिन इस तकनीक को xunit आदि के लिए काम करना चाहिए या अपनी खुद की चीज़ को xbuild या नकली के साथ काम करना चाहिए ।

.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. मोनो के लिए ट्रैविस को कॉन्फ़िगर करें

मोनो v3.8.0

नवीनतम मोनो का परीक्षण करने के लिए मैक होस्ट्स का उपयोग करना सबसे आसान है ( language:objective-cमोनो v3.1.2 का उपयोग करके लक्ष्य और बाद में मैक पर डीएमजी से सिर्फ एक पीकेजी में वितरण को बदल दिया गया है, इसलिए इंस्टॉल काफी सरल है। इस टेम्पलेट को पोर्टेबल क्लास लाइब्रेरीज़ का समर्थन करना चाहिए। .NET 4.5.1, और एफएसएचआरपी 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

दोनों को लक्षित करने के लिए मोनो v2.10.X और v3.0.X

मैं मोनो के कई संस्करणों के लिए एक बिल्ड मैट्रिक्स के लिए सेटअप करने के लिए मैक मेजबानों का उपयोग करना आसान है। नीचे स्क्रिप्ट देखें

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

Linux के लिए

और अब आपको अपने c # प्रोजेक्ट पर ट्रैविस का उपयोग करने के लिए अच्छा होना चाहिए।


22
शायद इस साइट पर मैंने देखे गए सबसे अच्छे उत्तरों में से एक है।
माइकल ग्रासमैन

नमस्ते, मैं ट्रैविस सीआई द्वारा एक fx4.5 परियोजना बनाने की कोशिश कर रहा हूं, लेकिन नहीं sudo installer -pkg। कृपया इसे ठीक करने में मेरी मदद कर सकते हैं? धन्यवाद! देखें, travis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-cउस टेम्पलेट के लिए आवश्यक है, ताकि वह OS X होस्ट का उपयोग करे।
jbtule

मुझे ServiceBus, Queue और BrokeredMessage के लिए CS0246 त्रुटियाँ ("प्रकार या नाम स्थान नहीं मिल सका") मिल रहा है। कोई विचार?
सईयाँकरोड

@ माटी वह विंडोज अज़्योर है? मुझे नहीं लगता कि यह मोनो संगत है, लेकिन मुझे यकीन है कि यह AppVeyor stackoverflow.com/a/19164665/637783
jbtule

25

यह महत्वपूर्ण बिंदु है - परियोजना को मोनो पर काम करना चाहिए। यह ज्यादातर पुस्तकालय-शैली की परियोजनाओं के लिए काम करता है ( AWS SDK .NET एक अच्छा उदाहरण है) हालांकि अधिक विकास प्रयासों और अनुशासन की आवश्यकता होती है। यदि आप Windows प्लेटफ़ॉर्म के लिए किसी प्रोजेक्ट को विकसित कर रहे हैं जैसे कि WPF एप्लिकेशन, Azure क्लाउड सेवा, Windows Phone / Store ऐप या यहां तक ​​कि ASP.NET वेब API के लिए लिनक्स बिल्डिंग वातावरण काम नहीं करेगा।

AppVeyor CI विंडोज प्लेटफॉर्म के लिए एक निरंतर निरंतर एकीकरण सेवा है और यह ओपन सोर्स प्रोजेक्ट्स के लिए मुफ्त है। यह विंडोज के लिए ट्रैविस CI जैसा है!

आप VS.NET समाधान, कस्टम MSBuild परियोजना, PSake या बैच फ़ाइल के किसी भी PowerShell स्क्रिप्ट के लिए निर्माण प्रक्रिया को सेटअप कर सकते हैं। इसके अलावा, AppVeyor में अंतर्निहित कलाकृतियों का प्रबंधन और तैनाती ढांचा है।


2
@jbtule हालांकि यह उस सवाल का सीधा जवाब नहीं है जो मूल्य प्रदान करता है, क्योंकि इस सवाल के कुछ आगंतुक (उदाहरण के लिए) दोनों मोनो और एमएस .नेट प्लेटफार्मों पर .net के लिए दोनों बिल्ड सर्वर में रुचि ले सकते हैं।
स्टेन्हुलथिन

1
इस पोस्ट के अलावा, वेयरकार ने हाल ही में देशी .NET समर्थन के रूप में अच्छी तरह से लॉन्च किया: blog.wercker.com/2013/10/25/…
pjvds

जब मैं 'साइन अप' लिंक दबाता हूं तो AppVeyor CI मुझे 503 त्रुटि दे रहा है। नहीं एक महान पहली छाप ...
दान Esparza

4
AppVeyor के लिए +1, मैंने हाल ही में .NET 4.5 एप्लिकेशन के लिए दो बिल्ड परिभाषाएँ तैयार की हैं और यह सेटअप के लिए बहुत ही सीधा है और इसमें बहुत लचीलापन है। समर्थन बहुत ही संवेदनशील है, साथ ही, मैंने एक बग की सूचना दी और इसे 24 घंटे से भी कम समय में ठीक किया गया और उत्पादन में धकेल दिया गया।
जे सी

8

जैसा कि पहले ही उल्लेख किया गया है, ट्रैविस सीआई को सी # के लिए बीटा समर्थन है । उपयोग करने के लिए सीधे आगे रहता है। इसके अलावा ननिट को बहुत आसानी से एकीकृत किया जा सकता है। यहाँ .travis.yml फ़ाइल का एक छोटा सा उदाहरण है जो ननिट परीक्षण चलाता है और बिल्ड को चिह्नित करता है यदि कम से कम एक यूनिट परीक्षण विफल हो जाता है:

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

धन्यवाद, इस विन्यास का उपयोग करते हुए मैं इसे पहली बार ट्रैविस पर चलाने में सक्षम था (अधिक विवरण के साथ जीएच मुद्दा github.com/o2platform/FluentSharp/issues/… )
डिनिस क्रूज़

इससे मुझे बहुत धन्यवाद मिला! केवल एक चीज जो मैंने जोड़ी है sudo: required, वह अंत में थी। एक जादू की तरह काम करता है।
w0ns88

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.