[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

时间: 2024-10-20 09:49:09

[Cake] 0.C#Make自动化构建-简介的相关文章

自动化构建工具Maven

目录 简介 Maven的核心概念 1.约定的目录结构 2.POM 3.坐标 4.依赖 5.仓库 6.生命周期 7.继承 8.聚合 Maven插件的设置 统一管理依赖的版本 常用Maven命令 @ 简介 如今我们构建一个项目需要用到很多第三方的类库,一个项目jar包的数量之多往往让我们无法想象,并且jar包之间的关系错综复杂,一个jar包往往又会引用其他jar包,缺少任何一个jar包都会导致项目编译失败. 以往开发项目时,人们往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,

浅谈前端自动化构建

前言 现在的前端开发已经不再仅仅只是静态网页的开发了,日新月异的前端技术已经让前端代码的逻辑和交互效果越来越复杂,更加的不易于管理,模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难,没有一个统一的标准,让前端的项目结构千奇百怪.前端自动化构建在整个项目开发中越来越重要. 我们首先来回想一下之前我们是如何来开始做一个项目的. ① 首先要确定这个项目要使用什么样的技术来实现,然后开始规划我们的项目目录,接着就要往项目增加第三方库依赖,比如: 拷贝 CSS库(Yui Reset |

更简单的自动化构建

gulp:更简单的自动化构建工具 目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里同样的任务也许只有几行.有兴趣的同学在学完本文后对比使用Grunt,你就会发现Gulp的代码量是最少的. 安装 需要先安装node.js.这里安装的v5.11.0.使用node -v查看版本号. gulp的安装不是很顺利.按照官方给的安装方法: npm instal

前端自动化构建——需求和工具选择

今天突然心血来潮,想把前端的一些人工工作流程自动化,其实之前已经在用grunt进行自动化构建,但总是觉得还是有些事情未做好.首先说说,前端平时需要做那些自动化吧: 1. 先讲HTML,每个项目每个页面都需要统一的头部,其他标题,关键字,作者等meta自行修改,body部分每个页面各自填充,但使用的框架统一. 2. CSS,我使用的是less来编写,所以需要编译成css,另外,编译过程,一些css属性需要自动添加浏览器前缀,例如border-radius,属性最好自动按照类型排序,一些css的编写

前端自动化构建工具——gulp

gulp是基于流的前端自动化构建工具. 一.环境配置 gulp是基于nodejs的,所以没有 nodejs 环境的要先去安装好 然后给系统配上gulp环境 npm install -g gulp 再到某一工程目录下 跟grunt一般,也是需要package.json包依赖文件和一个入口文件 gulpfile.js(其他名字识别不了) 然后就类似的先装上gulp npm install gulp --save-dev 最基本的使用方式是这样:(使用jshint插件校验js代码) var jshin

Jenkins自动化构建python nose测试

简介 通过Jenkins自动化构建python nose测试分两步: 1. 创建节点(节点就是执行自动化测试的机器): 2. 创建任务并绑定节点(用指定的机器来跑我们创建的任务,这里我们选择执行一段脚本). 创建节点 1. 登录jenkins平台,在左侧的节点中随便找一个节点点进去,然后在导航栏点击“nodes”-->点击“创建节点”-->输入“节点名称”-->选择“Permanent Agent”-->点击“OK”: 2. 指定jenkins的工作目录,随便指定-->点击“

近期总结:generator-web,前端自动化构建的解决方案

本文结合最近的工作经验,总结出一个较简洁的前端自动化构建方案,主张css和js的模块化,并通过grunt的自动化构建,有效地解决css合并,js合并和图片优化等问题,对于提高前端性能和项目代码质量有一定参考价值,欢迎阅读和点评:) github地址:https://github.com/liuyunzhuge/generator-web demo地址:https://liuyunzhuge.github.io/generator-web/ 有兴趣的同学,在阅读文章,学习或使用demo的过程中,有

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(四)(网内首发超详细版)

6安装maven 下载地址:http://maven.apache.org/download.cgi 解压安装 unzip –o apache-maven-3.2.1-bin.zip mv apache-maven-3.2.1 maven 配置环境变量 MAVEN_HOME=/usr/local/maven export PATH=$MAVEN_HOME/bin:$PATH 7 java环境自动构建部署 7.1 新建job 输入名称如下图 输入SVN服务器地址 注意:上面已经认证过了,因此没有报

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(一)(网内首发超详细版)

目录结构如下: 目录 1说明及环境介绍3 1.1说明3 1.2环境准备及格式约定4 2 Linux下apache搭建svn服务器4 2.1 apache安装部署4 2.2 svn安装部署5 2.3整合svn和apache6 2.4 ssl方式部署apache7 2.4.1安装apache7 2.4.2安装svn7 2.4.2 部署认证8 3 Linux下svn独立服务器方式部署9 3.1安装SVN9 3.2 配置环境10 3.3 权限配置样例11 3.4 启动SVN服务器12 3.5 访问方式1