.Net項目使用持續集成服務AppVeyor,Travis-CI實戰

skvein 8年前發布 | 64K 次閱讀 Linux 持續集成 持續集成系統 .NET

來自: http://www.cnblogs.com/zhang-zhi-hao/p/DotNET_Project_Uses_Continuous_Integration_Services_AppVeyor_And_TravisCI_In_Action.html

經常逛GitHub的同學可能會常常看到這個標志:

這就是持續集成服務 AppVeyor( https://ci.appveyor.com Travis-CI https://travis-ci.org 的標志,點第一個進去看看有什么:

第二個:

可以看到,這里是有Linux和OS X兩個編譯環境的,點Linux進去:

在OS X下也是差不多,就不截圖了。

相信很多人都已經知道持續集成了吧(不知道的可以在園子里搜幾篇文章看看)。當你授權給AppVeyor或者Travis-CI后,每次提交代碼AppVeyor或者Travis-CI都會從GitHub上或者BitBucket上同步代碼,然后按照你提前設定好的腳本進行編譯環境的搭建,編譯前的處理,編譯,編譯后的處理,單元測試,生成可以部署的文件,甚至可以生成NuGet包包然后推送到NuGet feed,或者配置環境變量和Host…功能還有很多,我用到的功能還是相當有限的,等待大家去開發。

這次是給大家分享一下ASP.NET 4.5 使用AppVeyor&&ASP.NET Core 1.0使用AppVeyor和Travis-CI的小小經驗。

第一部分:ASP.NET 4.5 使用 AppVeyor

AppVeyor使用的編譯環境是 windows server 2012+visual studio 2015;

首先要配置appveyor.yml文件,官方的例子(http://www.appveyor.com/docs/appveyor-yml)我的如下:

configuration: Release

init:

- git config --global core.autocrlf true

before_build:

- set PATH=C:\Program Files (x86)\MSBuild\14.0\Bin;%PATH%

- nuget restore

build_script:

- build.cmd

after_build:

- ps: Write-Host "build DONE,Start UnitTest"

- ps: Write-Host "當前目錄下的文件:"

- cmd: dir /a *

- cmd: cd C:/projects/fileupload/FileUpload/bin

- cmd: dir /a *

- cmd: cd C:/projects/fileupload/FileUpload.Tests/bin

- cmd: dir /a *

clone_depth: 1

test:

assemblies:

- '**\*.FileUpload.dll'

deploy: off

build.cmd如下:

@echo off

cd %~dp0

SETLOCAL

SET CACHED_NUGET=%LocalAppData%\NuGet\NuGet.exe

IF EXIST %CACHED_NUGET% goto copynuget

echo Downloading latest version of NuGet.exe...

IF NOT EXIST %LocalAppData%\NuGet md %LocalAppData%\NuGet

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest 'https://www.nuget.org/nuget.exe' -OutFile '%CACHED_NUGET%'"

:copynuget

IF EXIST .nuget\nuget.exe goto restore

md .nuget

copy %CACHED_NUGET% .nuget\nuget.exe > nul

:restore

IF EXIST build goto run

msbuild "FileUpload.sln" /verbosity:minimal

可以看到,其實這些文件都是一系列腳本,分為不同的階段執行,主要階段如下:

init(初始化)Clone(同步代碼),Build(編譯,又分為三個小階段:before_build,build,和after_build),test(單元測試,又分為三個小階段:before_test,test,和after_test),package(打包),Deployment(部署)等等

更加詳細的信息請查看http://www.appveyor.com/docs/build-configuration 的Build pipeline小節,(Tips:腳本同時支持powershell和cmd),然后把appveyor.yml文件提交到代碼庫就可以了,然后后面的就不用管了,它會自己編譯。然后就可以從SETTINGS里面的badges獲取你自己的build status了。拿到地址直接放到 README.md里面就好了,我用的是 markdown格式。

我的問題:我的項目包含單元測試,可是怎么試都沒能成功運行單元測試,誰會的麻煩幫一下忙,地址在這https://github.com/izhangzhihao/FileUpload

PS:我嘗試讓這個項目跑在 Travis-CI的 linux上,失敗了,誰知道怎么玩教教我。

第二部分:ASP.NET Core 1.0 使用 AppVeyor&&Travis-CI

AppVeyor使用的編譯環境是 windows server 2012+visual studio 2015;

Travis-CI使用的編譯環境是ubuntu 12和OS X 10.9.5(好老啊(-__-));

這次appveyor.yml就比較簡單啦,如下:

install:

- dnvm upgrade -r clr

- dnu restore

build:

verbosity: minimal

接下來是配置Travis-CI的.travis.yml,我的如下:

language: csharp

sudo: required

dist: trusty

solution: ./MediaPlayer.sln

os:

- linux

- osx

osx_image: xcode7.1

addons:

apt:

packages:

- gettext

- libcurl4-openssl-dev

- libicu-dev

- libssl-dev

- libunwind8

- zlib1g

before_install:

- if test "$TRAVIS_OS_NAME" == "osx"; then brew update; brew install icu4c; fi

env:

- KOREBUILD_DNU_RESTORE_CORECLR=true KOREBUILD_TEST_DNXCORE=true NO_PARALLEL_TEST_PROJECTS=E2ETests

install:

- curl -sSL https://github.com/libuv/libuv/archive/v1.4.2.tar.gz | tar zxfv - -C /tmp && cd /tmp/libuv-1.4.2/

- sh autogen.sh

- ./configure --prefix=$HOME/libuvinstall

- make

- make install

- export LD_LIBRARY_PATH="$HOME/libuvinstall/lib"

- cd $OLDPWD

- wget http://mirrordirector.raspbian.org/raspbian/pool/main/libu/libunwind/libunwind8_1.1-4.1_armhf.deb

- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo dpkg -I libunwind8_1.1-4.1_armhf.deb; fi

- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF; fi

- if [ "$TRAVIS_OS_NAME" == "linux" ]; then echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list; fi

- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get update; fi

- if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install mono-complete; fi

- mozroots --import --sync

- curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh

- dnvm list

- dnvm upgrade -u

- dnvm install latest -r coreclr -u

- dnvm list

- dnu restore

script:

- if [ "$TRAVIS_OS_NAME" == "linux" ]; then dnvm use default -r coreclr && dnu build --framework dnxcore50 /home/travis/build/izhangzhihao/MediaPlayer/MediaPlayer/project.json; fi

- if [ "$TRAVIS_OS_NAME" == "osx" ]; then dnvm use default -r coreclr && dnu build --framework dnxcore50 /Users/travis/build/izhangzhihao/MediaPlayer/MediaPlayer/project.json; fi

其實跟AppVeyor差不多,是由各個腳本文件組成的,然后也是分過程執行的。就是配置麻煩點,因為服務器是ubuntu12而.NET官方的是ubuntu14,所以還是遇到了不少問題,最麻煩的是libssl-dev老是裝不上,在解決了ubuntu的問題后OS X就很簡單了。大家也可以從相應項目的badge那里拿到build status badge,點擊這里

然后就可以得到你的build status的地址啦。

最終的成果如下:

碼字不易,覺得好的話給個贊吧!

</div>

 本文由用戶 skvein 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!