zoukankan      html  css  js  c++  java
  • [Cake] 0. C#Make自动化构建-简介

    0. Cake是什么?

    Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。

    熟悉大名鼎鼎的Make的小伙伴,应该已经知道Cake大致是个什么样的工具了,Cake具有以下几个特点:

    1. 方便编写:使用基于C#的DSL,非常易于编写自动化的脚本。
    2. 跨平台: 基于Roslyn和Mono来编译我们写的自动化脚本,使得它可以运行在windows,linux,mac上。
    3. 可靠的:可以建立在自己的机器上,也可以建立在像AppVeyor,TeamCity,TFS,VSTS或Jenkins这样的CI系统上,都可以以相同的方式运行。
    4. 丰富的工具集:支持MSBuild,MSTest,xUnit,NUnit,Nuget,ILMerge,Wix和SignTool等等,以及支持丰富的插件(Cake Addins)。
    5. 开源:基于MIT开放源代码(Cake on Github),并且是.NET 基金会支持的一个项目(Cake on dotnet foundation)。

    1. 一个简单的DEMO

    笔者在Github上创建了一个简单的DEMO(cake.demo),下面简单的介绍,项目非常简单,一个类库项目,一个测试项目,如下:

    1.1 下载引导脚本

    首先第一步下载一个基于Powershell的引导脚本文件build.ps1,这个文件并不是必须的,你可以直接用调用cake脚本文件),在项目所在的目录下运行: Invoke-WebRequest http://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1 

    备注:当前笔者是基于windows平台,开发环境是vs 2017 community:

    linux : curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/linux

    mac  : curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/osx

    1.2 创建Cake脚本

    添加一个文本文件build.cake(文件名随意,笔者懒调整build.ps1中指定的cake脚本文件而已。完整文件:https://github.com/linianhui/cake.demo/blob/master/build.cake)

    这一步我们用Cake来build以下我们上面的cake.demo这个项目。文件内容如下:

     1 /// args
     2 var target = Argument("target", "default");
     3 
     4 
     5 /// build task
     6 Task("build")
     7     .Does(() =>
     8 {
     9     MSBuild("./cake.demo.sln", new MSBuildSettings{
    10         Verbosity = Verbosity.Minimal
    11     });
    12 });
    13 
    14 
    15 Task("default")
    16     .IsDependentOn("build");
    17 
    18 
    19 /// run task
    20 RunTarget(target);

    脚本可以说是非常简单易懂,相信有C#基础的应该非常容易理解。

    1. 首先,创建了一个参数target(名字和build.ps1中指定的参数名一致),默认值是“default”。
    2. 其次,创建了一个名为build的Task,这个task调用MSBuild来build我们的项目。
    3. 然后,创建了一个名为default的task,它什么都没干,只是标识说我依赖一个为build的task,含义就是在运行default的task之前,会先运行build的task。
    4. 最后,用RunTarget来运行指定名字的task。

    OK,我们来运行一下build.ps1(初次运行它会下载cake所需的一些文件,这些文件会存放于build.ps1中指定的文件夹,默认是tools文件夹,感兴趣的可以看一看build.ps1里面干了什么)。咦,运行出错了!

    原因是我的一个Demo.Tests这个项目引用了xUnit的包,MSBuild没能正确的还原nuget包,这不知道算不算一个bug,笔者之前用 Cake的MSBuild来build vs2015的项目的时候是没有问题的,当前环境只安装了VS2017。不过也正好,我们再用Cake来写一个还原nuget包的task。

    1 /// nuget task
    2 Task("restore-nuget-packages")
    3     .Does(() =>
    4 {
    5     NuGetRestore("./cake.demo.sln");
    6 });

    再运行一次:

    这次可以了。

    然后我们再依次的添加几个task,清理build的文件:

    1 Task("clean")
    2     .Does(() =>
    3 {
    4     CleanDirectories("./src/*/bin");
    5     CleanDirectories("./test/*/bin");
    6 });

    运行单元测试:

    1 /// unit-test task
    2 Task("unit-test")
    3     .IsDependentOn("build")
    4     .Does(() =>
    5 {
    6     XUnit2("./test/*/bin/*/*.Tests.dll");
    7 });

    然后运行一下:

    1.3 build.ps1

    在前面我们提到这个文件并不是必须的文件,而是用它来下载Cake所需要的相关文件,以及设置默认的Cake配置。再者,我们可以通过它来简化对Cake的调用,比如上面列出来的几个task,我们可以通过传递参数给build.ps1,来运行我们指定的task(默认运行了default嘛)。比如:

    仅清理项目的build生成的文件。

    2. 总结

    得益于Cake基于C#DSL来编写脚本,相比写Powershell或者其他的脚本来完成自动化构建,使得C#开发人员非常容易上手。

    其次Cake基于Roslyn和Mono,使得它可以提供跨平台的自动化构建,也可以运行在各种常用的CI系统之上。

    再者Cake提供了丰富的内建工具集以及插件(Cake Addins),可以满足我们绝大部分的自动化构建需求,比如,编译,测试,打包,部署等等。

    例如前些日子我的一个web的demo项目(https://github.com/linianhui/Ids3.demo)使用cake来部署iis站点。

    3. 参考资料

    Make

    C# Make

    Cake Addins

    Cake on Github

    Cake on dotnet foundation

    cake.demo

    http://cakebuild.net/docs/tutorials/getting-started

    http://cakebuild.net/docs/resources/videos

    https://github.com/cake-build/example

  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/linianhui/p/cake-overview.html
Copyright © 2011-2022 走看看