.net持续集成cake篇之cake介绍及简单示例

系列目录html

cake介绍

Cake 是.net平台下的一款自动化构建工具,能够完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.若是有些特征Cake没有实现,咱们还能够很容易地经过扩展Cake来实现咱们想要的功能.linux

Cake有如下特色web

1) 使用c#语言编写,能够在Cake脚本里使用C#语言来实现咱们想要达到的功能.shell

2) 跨平台,能够运行在windows,linux 和macos上.macos

3)易于扩展,c#开发者很容易使用已有的c#语言知识对Cake进行扩展,甚至可让Cake支持Java,Python等语言的构建bootstrap

4) 易于和常见CI/CD平台结合,Cake很容易和常见的CI/CD平台,例如 Jenkins,AppVeyor, TeamCity, TFS, VSTS,Azure PipeLine等结合c#

5) 插件丰富,Cake官网和第三方开发者提供了丰富的Cake扩展工具,方便开箱即用.windows

新建一个Cake HelloWorld示例

本节咱们经过一个HelloWorld示例讲解如何制做Cake文件,下载启动脚本以及如何安装Cake visualstudio插件服务器

一.新建一个Cake文件

咱们新建一个.net项目(能够是类库,控制台或者web项目),这里咱们建立一个控制台项目,而后在项目sln所在目录下新建一个名为build.cake的文件.app

读者能够新建一个文本文件,而后的后缀改成cake,把文件名改成build,这样也能完成一个build.cake的建立.固然也能够经过执行Powershell命令New-Item build.cake来建立一个build.cake文件,使用powershell建立时必定要注意在当前项目所在目录下打开powershell,否则以上命令合建的文件可能路径并非咱们期待的.

有些读者可能有疑问是否是这个文件必定要命名为build.cake呢,答案是否认的,其实这个文件能够随意命令,可是做为初体验,强烈建议读者不要随便命令,而是跟着讲解作,以避免形成没必要要的麻烦

二.编辑build.cake文件

咱们新建build.cake后,用词本(或者其它本身熟悉的编辑器打开它),添加如下代码

var target = Argument("target", "Default");
var configuration = Argument("configuration", "Release");



Setup(ctx =>
{
    // Executed BEFORE the first task.
    Information("Running tasks...");
});

Teardown(ctx =>
{
    // Executed AFTER the last task.
    Information("Finished running tasks.");
});

Task("Default")
.Does(() => {
    Information("Hello World!");
});

RunTarget(target);

三.下载启动脚本

Cake在windows下启动脚本为build.ps1(固然也能够是其它名字),在linux和macos下为build.sh

须要注意的是虽然Cake在macos和linux下启动脚本都是build.sh可是并非如出一辙的,不一样平台要下载针对本平台的启动脚本.

因为我是在windows下运行的,所以下载windows平台对应的启动脚本build.ps1

在项目build.cake所在目录下,咱们打开powershell,而后执行如下命令Invoke-WebRequest http://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1 便可下载启动脚本

linux平台下载方式:curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/linux

mac平台下载方式 curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/osx

须要注意的是,必定要在当前目录(sln所在目录或者自已指定的其它目录),若是是从开始菜单中启动的powershell,必定要经过cd命令进入到目标目录.

image

windows 10能够在文件夹左上角点击文件在弹出菜单中找到powershell,这样启动的powershell目录就是在当前文件夹所在目录

四.执行构建

咱们在当前目录打开powershell,经过powershell,在powershell命令窗口里输入.\build.ps1执行刚下载的ps1脚本,过一分后咱们能够看到输出的构建信息

avatar

五.build.cake文件解析

初接触build.cake咱们可能对它很陌生,不过不要惧怕,它彻底是用c#语言写的,只是方法是自定义的.

build.cake里共有三个任务,Setup,TearDown和Default,其中Setup任务会在全部任务执行以前执行,TearDown任务会在全部任务执行后执行,很是相似于Nunit里的Setup和TearDown方法.有些时候咱们想在全部方法执行以前执行一些初始化工做,在全部任务执行完以后执行一些收尾工具,咱们能够把相应代码写在SetupTearDown

Setup,TearDownDefault里接收的都是一个委托,咱们可在在委托里写本身的代码,委托里的参数因为目前咱们没有使用到,这里再也不讲解.你们只要知道它的格式就好了.

Setup,TearDown是两个特殊的任务,由cake自动调用,而Default任务须要显地调用才能执行,咱们编写其它任务时,能够模仿Default任务.

在这里,有些童鞋可能会有疑问,以上任务经过脚本也能完成,为何还要这么麻烦来使用工具呢,其实使用脚本有不少弊端,咱们前面介绍了一个完整的.net web项目在测试环境的持续集成方案,其中使用到了数十个脚本和工具,若是咱们的脚本编写不够严谨每每会形成生产环境的损失.而且从实践上来看,脚本数量过多时每每容易失控.部署在服务器中脚本不少时候成为烫手山芋,不熟悉的人既不想看,也不想改,更重要的是不敢轻易改.也不敢轻易把它移除或者删除掉.另一个不可忽视的问题是脚本每每背后调用的是工具,工具又对运行环境有依赖.咱们在精心配置的一台服务器上可能运行良好,可是换更换到其它的服务器上每每会由于各类条件不知足形成各类问题,在人手不足的状况下这么问题尤其凸显.开发和运维都苦不堪言,开发脚本的初衷每每是为了提升效率,结果因为维护问题加深开发和运维之间的矛盾.而cake则由自身管理各类依赖,很大程度上解决了以上问题.