AppVeyor CI初试

持续集成(CI)工具可以帮助你在每次提交时执行测试,并将报告结果提交到合并请求,从而帮助维持团队的质量标准。

简单地说,就是在你提交代码后能自动帮你编译并执行测试和发布的服务。

有时候你改了几行代码又不想在自己的电脑上跑一遍测试,就可以通过CI来自动编译并执行测试;

有时候你提交了一个commit修正了一个bug,但是还不能立马发布一个新版本,受到这个bug困扰的用户就可以先去CI上下载对应提交的自动编译版本,而无需自己搭环境编译。

 

今天尝试了一下AppVeyor。之前也有了解过TravisCI,不过经过观察.NET项目使用前者的居多,而且AppVeyor确实对.NET项目有很好的支持,所以就用它了。

首先进入AppVeyor,用自己的github账号登录并授权。然后点击NEW PROJECT添加一个你的repo,进入设置页面。

设置可以通过设置页面,也可以使用YAML(AppVeyor.yml)。一开始可以先用设置页面,当项目多了之后可以把之前的设置导出成YAML,然后稍作修改放在新repo中使用。

General

可以设置编译哪些branch,以及自动版本号的设置方式。

Environment

可设置编译环境。对于.NET项目来说,一定要选择够高的VS版本。默认是VS2015,对于使用C#7的项目来说编译一定是失败的。还可以设置路径等。

Build

Build设置是最为关键的。首先编译配置(DEBUG/RELEASE)和平台(AnyCPU/x86/x64)用过VS的都知道。然后要注意编译前后执行的脚本(以下脚本均为PowerShell,也可以使用CMD)。

Before build script是编译前执行的脚本。对于.NET项目,通常会引用nuget包,但是CI编译时不会自己restore,所以这个地方一定要写恢复nuget包的脚本:

nuget restore

After build script是编译后执行的脚本。如果你需要把编译出来的内容打包,就把打包代码写在这里。

cd $env:APPVEYOR_BUILD_FOLDER #这个环境变量能定位代码目录
mkdir Release -Force #使用-Force可确保即使目录已存在也不会出错
Copy-Item FreeMote/bin/Release/* Release #把生成的文件集中到一个文件夹中
del Release\*.pdb #删除不需要的文件(在命令后面加-WhatIf参数可预览效果)
7z a FreeMote.zip Release\* #调用7z进行打包

Tests

可以配置测试。解决方案里的MSTest项目默认会在编译后直接开始测试,若有测试失败的方法则本次生成失败。如果不需要运行测试也可以关闭。

Artifacts

可以配置供下载的打包文件。填写正确的路径即可。

Deployment

可以配置部署,包括github release、web、FTP、nuget等等。

Notifications

可以配置各种通知。

Badges

可以配置贴在readme里的贴纸。

 

配置完成后,push一次提交或者手动点击build就可以看到结果了。

Update:子模块与nuget

有时候一个项目内会用到子模块(git submodule),而AppVeyor不会为我们自动update子模块,所以需要手动配置Before build script:

git submodule update --init --recursive

这时就可能会遇到另一个问题:子模块里的nuget引用也需要restore。

nuget restore 子模块路径\子模块解决方案.sln

在nuget restore时,还可能遇到一个冷门问题:nuget restore不会执行引用包的安装脚本install.ps1,只有在IDE中打开时才会执行。不过大部分nuget包压根没有安装脚本,即使有也大都是干一些复制粘贴的工作,可以模仿着写在Before build script里。

 

 

添加评论

Loading