ฉันจะใช้ Travis-CI กับ C # หรือ F # ได้อย่างไร


92

บริการผสานรวมอย่างต่อเนื่อง Travis CI รองรับหลายภาษาอย่างเป็นทางการแต่ไม่ใช่ C # หรือ F #

ฉันสามารถใช้กับโปรเจ็กต์. net ได้หรือไม่

คำตอบ:


16

Travis CI รองรับ C #แล้ว อ้างอย่างเสรีจากหน้านั้น:

ภาพรวม

การตั้งค่าสำหรับโครงการ C #, F # และ Visual Basic มีลักษณะดังนี้:

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

สคริปต์

ตามค่าเริ่มต้น Travis จะเรียกใช้ xbuild solution-name.sln Xbuild เป็นเครื่องมือสร้างที่ออกแบบมาเพื่อใช้กับเครื่องมือ MSBuild ของ Microsoft หากต้องการลบล้างสิ่งนี้คุณสามารถตั้งค่าแอตทริบิวต์สคริปต์ดังนี้:

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

NuGet

ตามค่าเริ่มต้น Travis จะเรียกใช้ nuget restore solution-name.sln ซึ่งกู้คืนแพ็คเกจ NuGet ทั้งหมดจากไฟล์โซลูชันของคุณ หากต้องการลบล้างสิ่งนี้คุณสามารถตั้งค่าแอตทริบิวต์การติดตั้งดังนี้:

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

นี่คือคำตอบ สั้นและรวบรัด
vidstige

150

ดูคำตอบของ danielnixonสำหรับวิธีการอย่างเป็นทางการในตอนนี้

มันเป็นไปได้.

1. โปรเจ็กต์ของคุณต้องทำงานกับโมโน

บนเครื่องขาวดำของคุณเองโดยใช้ terminal, ลงในไดเรกทอรีวิธีการแก้ปัญหาของคุณและเรียกใช้คำสั่งcd xbuildสิ่งนี้อาจใช้งานได้โดยอัตโนมัติหรืออาจไม่ทำงานเนื่องจากมีคุณสมบัติที่คุณใช้ในสตูดิโอภาพที่ต้องปรับแต่งแบบโมโน

สิ่งที่ต้องระวัง:

  • ไม่มีข้อผิดพลาดของไฟล์ตรวจสอบให้แน่ใจว่าชื่อไฟล์ตรงกับ.csprojlinux ของคุณมีพา ธ ที่สำคัญตัวพิมพ์เล็กและใหญ่ซึ่ง windows ไม่ได้
  • Nuget ต้องการให้คุณดำเนินการexport EnableNuGetPackageRestore=trueก่อนxbuildหากโครงการของคุณกู้คืนอัตโนมัติ
  • อินสแตนซ์โมโนของคุณอาจไม่มีใบรับรอง SSL ระดับรูทให้ใช้mozroots --import --syncเพื่อติดตั้ง
  • นอกจากนี้หากคุณเห็นข้อผิดพลาดของไฟล์ที่หายไปnuget.*แทนที่จะมีNuGet.*การอ้างอิงใน. csproj ของคุณทราบว่ามีอยู่ใน nuget หลายเวอร์ชัน
  • มีข้อผิดพลาดในไฟล์เป้าหมายของ 2.5 นักเก็ตตามช่องว่างในไฟล์. เป้าหมายวิธีแก้ปัญหาที่นี่
  • สำหรับการรองรับ FSharp 3.0 คุณต้องใช้ mono 3.0.X หรือใหม่กว่า (และอาจต้องสร้างจากแหล่งที่มา แต่ติดตั้งโดยค่าเริ่มต้นบน Mac OS X)
  • สำหรับโครงการ FSharp จาก VS2013 คุณอาจต้องแก้ไขของคุณ.fsprojจะเรียกการตั้งค่าในเครื่อง VS2012 หน้าต่างไม่ใช่โดยการเพิ่ม'$(VisualStudioVersion)' == '11.0' Or $(OS) != 'Windows_NT'ดูตัวอย่าง

Mono 3.1.12, 3.2.4 และใหม่กว่า

  • Mono 3.1.2, 3.2.4 และใหม่กว่ามีการรองรับ PCL แต่อาจมีข้อผิดพลาด PCL ที่หายไป ระวังข้อผิดพลาดที่แสดงด้านล่างภายใต้Mono 3.0.12เนื่องจากมีเฉพาะการอ้างอิงกรอบงานต่อไปนี้:
    • v4.0, Profile136 .NET Framework 4, Silverlight 5, Windows Phone 8, แอป 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, แอป Windows Store (Windows 8)
    • v4.0, Profile158 .NET Framework 4.5, Silverlight 5, Windows Phone 8, แอป 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, แอป Windows Store (Windows 8)
    • v4.0, Profile42 .NET Framework 4.0.3, Silverlight 5, แอป Windows Store (Windows 8)
    • v4.0, Profile47 .NET Framework 4.5, Silverlight 5, แอป Windows Store (Windows 8)
    • v4.0, Profile5 .NET Framework 4, แอพ Windows Store (Windows 8)
    • v4.0, Profile6 .NET Framework 4.0.3, แอป Windows Store (Windows 8)
    • v4.5, Profile49 .NET Framework 4.5, Windows Phone 8
    • v4.5, Profile7 .NET Framework 4.5, แอพ Windows Store (Windows 8)
    • v4.5, Profile78 .NET Framework 4.5, Windows Phone 8, แอป Windows Store (Windows 8)

โมโน 3.0.12

  • Mono 3.0.12 มีเป้าหมายสำหรับ Portable Class Libraries แต่ไม่ใช่ชุดอ้างอิง มองหา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.เงื่อนไขการใช้งานแพลตฟอร์ม (กล่าวถึงในMono 3.0.11 หรือก่อนหน้า ) หรืออัปเกรดเป็น 3.1.2

Mono 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

  • นอกจากนี้ Mono v2.10 ยังไม่มี Microsoft บางตัวสร้างคลาสที่ Nuget ต้องการคุณสามารถคัดลอก dll v3.0.X ซึ่งมีขนาดเล็กมากไปยังไดเร็กทอรี. nuget (ฉันใช้ที่นี่ )

2. สามารถเรียกใช้การทดสอบหน่วยจากบรรทัดคำสั่ง

.ci/nunit.shเป็นเชลล์สคริปต์ของฉันเองสำหรับการทดสอบแม่ชีซึ่งตรวจสอบในรูทของ repo ดังนั้นฉันสามารถติดตั้ง nunit-console เวอร์ชันที่ฉันต้องการด้วย 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. กำหนดค่า Travis สำหรับโมโน

โมโน v3.8.0

สำหรับการทดสอบโมโนล่าสุดมันง่ายที่สุดในการใช้โฮสต์ Mac (กำหนดเป้าหมายโดยใช้language:objective-cMono v3.1.2 และต่อมาเปลี่ยนการแจกจ่ายบน Mac จาก DMG เป็นเพียง PKG ดังนั้นการติดตั้งจึงค่อนข้างง่ายเทมเพลตนี้ควรรองรับ Portable Class Libraries, .NET 4.5.1 และ 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

เพื่อกำหนดเป้าหมายทั้ง Mono v2.10.X และ v3.0.X

ฉันใช้โฮสต์ Mac ที่ใช้งานง่ายในการตั้งค่าสำหรับ build matrix สำหรับ Mono หลายเวอร์ชัน ดูสคริปต์ด้านล่าง

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

และตอนนี้คุณควรจะไปใช้ travis ในโครงการ c # ของคุณ


22
นั่นอาจเป็นหนึ่งในคำตอบที่ดีที่สุดที่ฉันเคยเห็นในไซต์นี้
Michael Grassman

สวัสดีครับผมกำลังพยายามที่จะสร้างโครงการ fx4.5 โดยเทรวิส CI sudo installer -pkgแต่ไม่ โปรดช่วยฉันแก้ไขได้ไหม ขอบคุณ! ดูtravis-ci.org/Aimeast/TestForFirst/builds/13814315
Aimeast

language: objective-cจำเป็นสำหรับเทมเพลตนั้นเพื่อให้ใช้โฮสต์ OS X
jbtule

ฉันได้รับข้อผิดพลาด CS0246 ("ไม่พบประเภทหรือชื่อเนมสเปซ") สำหรับ ServiceBus, Queue และ BrokeredMessage ความคิดใด ๆ ?
saiyancoder

@Mati นั่นคือ Windows Azure? ฉันไม่คิดว่ามันเข้ากันได้กับโมโน แต่ฉันคิดว่ามันจะทำงานได้อย่างง่ายดายบน AppVeyor stackoverflow.com/a/19164665/637783
jbtule

25

นั่นคือประเด็นสำคัญ - โครงการต้องทำงานกับโมโน ซึ่งส่วนใหญ่ใช้ได้กับโปรเจ็กต์แบบไลบรารี ( AWS SDK .NETเป็นตัวอย่างที่ดี) แม้ว่าจะต้องใช้ความพยายามและวินัยในการพัฒนามากกว่าก็ตาม สภาพแวดล้อมการสร้าง Linux จะไม่ทำงานหากคุณกำลังพัฒนาโครงการสำหรับแพลตฟอร์ม Windows เช่นแอปพลิเคชัน WPF บริการคลาวด์ Azure แอป Windows Phone / Store หรือแม้แต่ ASP.NET Web API

AppVeyor CIเป็นบริการรวมต่อเนื่องที่โฮสต์สำหรับแพลตฟอร์ม Windows และฟรีสำหรับโครงการโอเพ่นซอร์ส เหมือนกับ Travis CI สำหรับ Windows!

คุณสามารถตั้งค่ากระบวนการสร้างสำหรับโซลูชัน VS.NET, โครงการ MSBuild แบบกำหนดเอง, PSake หรือสคริปต์ PowerShell ของไฟล์แบตช์ นอกจากนี้ AppVeyor ยังมีกรอบการจัดการและการปรับใช้สิ่งประดิษฐ์ในตัว


2
@jbtule แม้ว่าจะไม่ใช่คำตอบโดยตรงสำหรับคำถาม แต่ก็ให้คุณค่าเนื่องจากผู้เยี่ยมชมคำถามนี้ (เช่นฉัน) อาจสนใจทั้งสร้างเซิร์ฟเวอร์สำหรับ. net ทั้งบนแพลตฟอร์มโมโนและ MS .net
steenhulthin

1
นอกจากโพสต์นี้แล้ว wercker เพิ่งเปิดตัวการสนับสนุน. NET แบบเนทีฟเช่นกัน: blog.wercker.com/2013/10/25/…
pjvds

AppVeyor CI ให้ข้อผิดพลาด 503 แก่ฉันเมื่อฉันกดลิงก์ 'สมัคร' ไม่ใช่ความประทับใจแรกที่ดี ...
Dan Esparza

4
+1 สำหรับ AppVeyor ฉันเพิ่งตั้งค่าคำจำกัดความบิวด์สองรายการสำหรับแอปพลิเคชัน. NET 4.5 และเป็นการตั้งค่าที่ตรงไปตรงมามากและมีความยืดหยุ่นมาก การสนับสนุนตอบสนองได้ดีมากเช่นกันฉันรายงานข้อบกพร่องและได้รับการแก้ไขและผลักดันให้ใช้งานได้จริงภายในเวลาไม่ถึง 24 ชั่วโมง
เจค

8

ดังกล่าวแล้วเทรวิส CIมีเบต้าสนับสนุนสำหรับ C # ฉันไม่ตรงไปตรงมาที่จะใช้ นอกจากนี้ยังสามารถรวมแม่ชีได้ง่ายมาก นี่คือตัวอย่างเล็ก ๆ ของไฟล์. travis.yml ซึ่งเรียกใช้การทดสอบ nunit และทำเครื่องหมายการสร้างว่าล้มเหลวหากการทดสอบอย่างน้อยหนึ่งหน่วยล้มเหลว:

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

ขอบคุณที่ใช้การกำหนดค่านี้ฉันสามารถเรียกใช้บน travis ได้เป็นครั้งแรก (ปัญหา GH พร้อมรายละเอียดเพิ่มเติมgithub.com/o2platform/FluentSharp/issues/… )
Dinis Cruz

สิ่งนี้ช่วยฉันได้มากขอบคุณ! สิ่งเดียวที่ฉันเพิ่มคือsudo: requiredในตอนท้าย ใช้งานได้เหมือนมีเสน่ห์
w0ns88

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.