.net持续集成cake篇之cake介绍及简单示例
cake介绍
Cake 是.net平台下的一款自动化构建工具,可以完成对.net项目的编译,打包,运行单元测试,集成测试甚至发布项目等等.如果有些特征Cake
没有实现,我们还可以很容易地通过扩展Cake来实现我们想要的功能.
Cake
有以下特点
使用c#语言编写,可以在Cake脚本里使用C#语言来实现我们想要达到的功能.
跨平台,可以运行在windows,linux 和macos上.
3)易于扩展,c#开发者很容易使用已有的c#
语言知识对Cake
进行扩展,甚至可以让Cake
支持Java,Python等语言的构建
易于和常见CI/CD平台结合,
Cake
很容易和常见的CI/CD平台,例如Jenkins
,AppVeyor
,TeamCity
,TFS
,VSTS
,Azure PipeLine
等结合插件丰富,Cake官网和第三方开发者提供了丰富的Cake扩展工具,方便开箱即用.
新建一个Cake HelloWorld示例
本节我们通过一个HelloWorld示例讲解如何制作Cake文件,下载启动脚本以及如何安装Cake visualstudio插件
一.新建一个Cake文件
我们新建一个.net项目(可以是类库,控制台或者web项目),这里我们创建一个控制台项目,然后在项目sln
所在目录下新建一个名为build.cake
的文件.
读者可以新建一个文本文件,然后的后缀改为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命令进入到目标目录.
windows 10可以在文件夹左上角点击
文件
在弹出菜单中找到powershell,这样启动的powershell目录就是在当前文件夹所在目录
四.执行构建
我们在当前目录打开powershell,通过powershell,在powershell命令窗口里输入.\build.ps1
执行刚下载的ps1脚本,过一分后我们可以看到输出的构建信息
五.build.cake文件解析
初接触build.cake
我们可能对它很陌生,不过不要害怕,它完全是用c#语言写的,只是方法是自定义的.
build.cake里共有三个任务,Setup,TearDown和Default,其中Setup
任务会在所有任务执行之前执行,TearDown
任务会在所有任务执行后执行,非常类似于Nunit
里的Setup和TearDown方法.有些时候我们想在所有方法执行之前执行一些初始化工作,在所有任务执行完之后执行一些收尾工具,我们可以把相应代码写在Setup
和TearDown
里
Setup
,TearDown
和Default
里接收的都是一个委托,我们可在在委托里写自己的代码,委托里的参数由于目前我们没有使用到,这里不再讲解.大家只要知道它的格式就行了.
Setup
,TearDown
是两个特殊的任务,由cake自动调用,而Default任务需要显地调用才能执行,我们编写其它任务时,可以模仿Default任务.
在这里,有些童鞋可能会有疑问,以上任务通过脚本也能完成,为什么还要这么麻烦来使用工具呢,其实使用脚本有很多弊端,我们前面介绍了一个完整的.net web项目在测试环境的持续集成方案,其中使用到了数十个脚本和工具,如果我们的脚本编写不够严谨往往会造成生产环境的损失.并且从实践上来看,脚本数量过多时往往容易失控.部署在服务器中脚本很多时候成为烫手山芋,不熟悉的人既不想看,也不想改,更重要的是不敢轻易改.也不敢轻易把它移除或者删除掉.另外一个不可忽视的问题是脚本往往背后调用的是工具,工具又对运行环境有依赖.我们在精心配置的一台服务器上可能运行良好,但是换更换到其它的服务器上往往会因为各种条件不满足造成各种问题,在人手不足的情况下这么问题尤为凸显.开发和运维都苦不堪言,开发脚本的初衷往往是为了提高效率,结果由于维护问题加深开发和运维之间的矛盾.而cake则由自身管理各种依赖,很大程度上解决了以上问题.
.net持续集成cake篇之cake介绍及简单示例的更多相关文章
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- 关于 AutoResetEvent 的介绍的简单示例
关于 AutoResetEvent 的介绍的简单示例 直接贴代码了: class Program { static void Main(string[] args) { string result = ...
- .net持续集成sonarqube篇之 sonarqube触发webhook
系列目录 WebHook近些年来变得越来越流行,github,gitlab等代码托管平台都提供webhook功能.关于webhook这里不做详细介绍,大家可以参阅读相关互联网书籍或者材料来更深了解.可 ...
- Jenkins持续集成体系 | 最完整的介绍及资料
这篇文章是来给大家普及Jenkins知识的, Jenkins能解决什么问题, 有哪些应用场景, 为何要掌握Jenkins, 掌握Jenkins后有哪些好处, 弄懂Jenkins需要掌握哪些知识 不知道 ...
- 93、持续集成以及Jenkins的知识介绍
持续集成是什么? }持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程.集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是 ...
- .net持续集成cake篇之cake任务依赖、自定义配置荐及环境变量读取
系列目录 新建一个构建任务及任务依赖关系设置 上节我们通过新建一个HelloWorld示例讲解了如何编写build.cake以及如何下载build.ps1启动文件以及如何运行.实际项目中,我们使用最多 ...
- .net持续集成sonarqube篇之sonarqube基本操作(一)
系列目录 Sonarqube Web管理界面虽然设计的简洁大方,也非常直观,但是由于功能繁多,这对快速入手以及快速定位到想要的功能都是一个挑战,在以后的几个小节里我们简要介绍. OwerView(概览 ...
- .net持续集成sonarqube篇之 sonarqube集成单元测试
系列目录 通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0% 这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告. 这里需要借助O ...
- .net持续集成sonarqube篇之 sonarqube与jenkins集成(插件模式)
系列目录 Jenkins通过插件集成Sonarqube 通过上一节我们了解了如何配置以使jenkins ci环境中可以执行sonarqube构建,其实Sonarqube官方也提供了jenkins插件以 ...
随机推荐
- linux服务脚本编写
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- SQLite Expert Professional 打开加密SQLite数据库
原文 SQLite Expert Professional 打开加密数据库 (已修改) 版本:sqlite expert professional 4.2.0.739 (x86) 目的:用SQLite ...
- UAP开发错误之The given System.Uri cannot be converted into a Windows.Foundation.Uri(windows phone背景更换)
今天博主在开发一款windows phone应用时,希望实现app背景的更换,思路很简单.使用ApplicationDataContainer容器存储我的图片路径,每次载入应用时读取这个路径以决定我用 ...
- .NET重思(二)接口和抽象类的取舍
不得不说,接口和抽象类好像啊~两者都不可以实例化,并且未实现的部分都是由派生类实现的. 他们主要有这么个区别: (1)抽象类的派生类可以是派生类,换言之,抽象成员在派生类中不一定完全实现,而接口要求其 ...
- 80%的岗位是没有太多能力上的要求的(少部分聪明的人开始觉醒,这部分一定是那些主动追求、主动学习的人;30岁现象能区分真正专业和不学无术的人)good
不要沦陷程序员的30岁问题 热门> 就是学习能力和工作热情态度的问题. 我之前也跟作者一样思考过这个问题,答案是否定的. 在知识积累的行业,年纪越大,越吃香,比如金融,医学,IT.就怕3 ...
- cStor云存储、cProc云处理、cVideo云视频、cTrans云传输,云创个人网盘
http://www.cstor.cn,微信公众号:cstor_cn. 云创大数据是国际上云计算产品线齐全的企业之一,针对爆炸式增长的大数据需求,研发了自主知识产权的cStor云存储.cPr ...
- 可视化流程设计——流程设计器演示(基于Silverlight)
上一篇文章<通用流程设计>对鄙人写的通用流程做了一定的介绍,并奉上了相关源码.但一个好的流程设计必少不了流程设计器的支持,本文将针对<通用流程设计>中的流程的设计器做一个简单的 ...
- vuejs 项目引入微信jssdk
一.导入依赖包 npm i -S weixin-js-sdk 二.前端页面使用 import wx from 'weixin-js-sdk' export default { created() { ...
- C#制作浮动图标窗体
先看效果: 这个小图标可以进行随意拖拽,点击还可以产生事件 随便演示一下,效果就是这样的. 下面直接演示如何制作: 新建一个窗体,设置窗体的FormBorderStyle为None(去掉窗体边框): ...
- Confluence安装、汉化及jira整合
今天上午装了一下Confluence,刚开始装的时候成功了,成功后进入数据库配置阶段,本人想把jira和confluence整合一起用,刚开始提示数据库连接问题,后来一直问题提示Connection ...