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

cake介绍

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

Cake有以下特点

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

2) 跨平台,可以运行在windows,linux 和macos上.

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

4) 易于和常见CI/CD平台结合,Cake很容易和常见的CI/CD平台,例如 Jenkins,AppVeyorTeamCityTFSVSTS,Azure PipeLine等结合

5) 插件丰富,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 =>{        Information("Running tasks...");});Teardown(ctx =>{        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命令进入到目标目录.

640?wx_fmt=png

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

四.执行构建

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

640?wx_fmt=png

五.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则由自身管理各种依赖,很大程度上解决了以上问题.

原文链接:https://www.cnblogs.com/tylerzhou/p/11204862.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Educational Codeforces Round 73 (Rated for Div. 2) Make The Fence Great Again dp + 结论

传送门 文章目录题意:思路:题意: 思路: 首先证明一个结论:一个数最多被加两次。 首先假设a[i]a[i−1]a[i]a[i-1]a[i]a[i−1]或a[i]a[i1]a[i]a[i1]a[i]a[i1],那么此时可以将a[i]a[i]1a[i]a[i]1a[i]a[i]1&am…

.NET Core 3.0 发布小尺寸 self-contained 单体可执行程序

.NET Core 提供的发布应用程序选项 self-contained 是共享应用程序的好方法,因为应用程序的发布目录包含所有组件、运行时和框架。您只需要告诉使用者应用程序的入口 exe 文件,就可以使程序运行起来,而不必担心目标计算机上是否存在.NET Core…

Educational Codeforces Round 73 (Rated for Div. 2) E. Game With String 思维博弈 好题(2500)

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 我们将每一段...拿出来看成若干段&#xff0c;将其分成以下四种情况&#xff1a; (1)len<b(1)len<b(1)len<b (2)b≤len<a(2)b\le len<a(2)b≤len<a (3)a≤len<2∗b(3…

「Sqlserver」数据分析师有理由爱Sqlserver之三-最值得使有低投入高产出的Sqlserver功能...

数据分析师群体&#xff0c;有别于一般的传统开发群体和数据库运维群体&#xff0c;对Sqlserver的功能需求上也各不相同&#xff0c;本篇以笔者的亲身经历&#xff0c;用一种有别于一般性教程的角度来讲解Sqlserver值得我们学习&#xff0c;投入产出比高的一些功能模块。当然&a…

.NET开发框架(八)-服务器集群之网络负载平衡(视频)

【视频教程在文章底部】&#xff0c;本文讲解Windows服务器集群的网络负载平衡NLB的作用&#xff0c;以及在.NET开发框架的架构设计中&#xff0c;如何应用NLB与ARR&#xff0c;使用它们各有什么优点。视频教程目录&#xff1a;1、讲解NLB概念与演示其作用 2、安装配置负载均衡…

人生如戏,别太入戏

这里是Z哥的个人公众号每周五早8点 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「81」篇原创敬上大家好&#xff0c;我是Z哥。对&#xff0c;就是脑袋很大的那个。大到什么程度呢&#xff1f;我给新来的小伙伴们说说。我昨天还打算配副新眼镜来着&#xff0…

C#只用属性来解决兔子,不用方法和循环

属性在调用者看来就像一个普通的变量&#xff0c;但作为类的设计者&#xff0c;你可以利用属性来隐藏你类中的一些字段&#xff0c;使外界只能通过属性来访问你的字段&#xff0c;你可以通过属性来限制外界对你的字段的存取&#xff0c;就利用get、set。如果想让用户随意存取你…

.netcore项目docker化,以及docker之间通信

简言&#xff1a;最近刚完成公司的新系统&#xff0c;系统使用的是微服务架构&#xff0c;由于领导说要将服务docker化。下面将我的研究结果分享出来&#xff0c;如若有错误的地方&#xff0c;还请各位大佬多多指点。目录&#xff1a;  什么是docker&#xff1f;使用docker有…

Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 恶心的构造题&#xff0c;思路很简单但是代码细节很多&#xff0c;搞了半天。 根据题目的性质不难发现&#xff0c;如果有两个相同颜色的球相邻&#xff0c;那么他们的颜色永远不会改变。 …

.NET CORE 多语言实现方案

根据市场需求&#xff0c;基于.NET CORE平台开发的RoadFlow工作流平台需要实现多语言版本。经过方案讨论和比对&#xff0c;决定采用.NET自带的本地化功能来实现多语言。话不多说&#xff0c;直接上实现方式。首先修改Startup.cs在public void ConfigureServices(IServiceColle…

中国程序员,请挺起你的腰杆!

这两天发生一个事&#xff0c;登月50周年之际&#xff0c;阿波罗11号制导计算机&#xff08;AGC&#xff09;指令和登月模块的源代码在Github上发布公开了&#xff0c;大量中国人前往围观&#xff0c;把issues区当成了论坛版块灌水留言。猎奇起哄本为消遣作乐&#xff0c;有不妥…

Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 史上最水GGG题&#xff0c;没有之一。 考虑最小的情况如何构造&#xff0c;显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可&#xff0c;这样的最小值为n∗(n1)2\frac{n*(n1)}{2}2n∗(n1)​…

Async,Await和ConfigureAwait的关系

在.NET Framework 4.5中&#xff0c;async / await关键字已添加到该版本中&#xff0c;简化多线程操作&#xff0c;以使异步编程更易于使用。为了最大化利用资源而不挂起UI&#xff0c;你应该尽可能地尝试使用异步编程。虽然async / await让异步编程更简单&#xff0c;但是有一…

Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路&#xff1a; 首先需要发现一些性质&#xff0c;假设preipre_iprei​代表所有mj<im_j< imj​<i的pjp_jpj​和。可以发现&#…

DevOps案例研究:知人善任——Google敏捷核心文化

内容来源&#xff1a;DevOps案例深度研究-Google敏捷实践战队&#xff0c;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会。本文内容贡献者&#xff1a;陈霁、刘翀、谈佳婧、张霖。阅读干货前先感受一下热烈的氛围~一、Google如何快速交付原型1.1 Savioke公…

在 VS Code 中轻松 review GitHub Pull Requests

相信大家在平时工作或者自己的项目中&#xff0c;一定都有在 GitHub 上进行 Code Review 的经历。对于韩老师来说&#xff0c;不论是平时工作的项目&#xff0c;还是自己的业余项目&#xff0c;代码基本都是在 GitHub 上。所以&#xff0c;在 GitHub 上进行 Pull Requests 的 C…

火热的云原生到底是什么?一文了解云原生四要素!

所谓云原生&#xff0c;它不是一个产品&#xff0c;而是一套技术体系和一套方法论&#xff0c;而数字化转型是思想先行&#xff0c;从内到外的整体变革。更确切地说&#xff0c;它是一种文化&#xff0c;更是一种潮流&#xff0c;是云计算的一个必然导向。随着虚拟化技术的成熟…

为什么说拥抱.NET CORE的时候到了

微软和社区已经做了大量艰苦的工作&#xff0c;使.Net Core成为市场上具有竞争力的框架&#xff0c;帮助开发人员快速开发具有最佳性能和可扩展性的强大应用程序。做的最棒的事情是.Net Framework开发人员不需要任何新知识来处理.Net Core。这也是开发人员在很短的时间内采用.N…

程序员如何学习英语

首先&#xff0c;这不是一篇广告&#xff0c;虽然这个标题很像。其次&#xff0c;我的英语水平也很一般&#xff0c;所以更多的是谈谈一些失败的经历和思考&#xff0c;俗话说&#xff0c;成功的经验不可复制&#xff0c;失败的经验倒可以让我们少走弯路。英语的重要性毋庸置疑…

使用Azure云原生构建博客是怎样一种体验?(上篇)

点击上方蓝字关注“汪宇杰博客”导语https://edi.wang我的网站是在.NET Core 平台上使用 C#语言编写的开源博客系统&#xff0c;运行于微软智慧云 Azure 国际版上。本文将重点介绍 Azure 的各项服务如何为博客带来丝滑体验与保驾护航。历史回顾我博客的历史可以追溯到2003年&am…