[Cake] 1. CI中的Cake

简介: 在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell在本地运行Cake脚本。本篇在此基础上,介绍下如何在CI环境中使用Cake。 1. Cake简介续 1.1 为Task添加注释信息 Cake的每一个Task都可以添加一项描述,用来解释它的用途。

在上一篇C#Make自动化构建-简介中,简单的介绍了下Cake的脚本如何编写以及通过Powershell在本地运行Cake脚本。本篇在此基础上,介绍下如何在CI环境中使用Cake。

1. Cake简介续

1.1 为Task添加注释信息

Cake的每一个Task都可以添加一项描述,用来解释它的用途。比如下面的示例:

1 Task("restore")
2     .Description("还原项目依赖")
3     .Does(() =>
4 {
5     DotNetCoreRestore(soluction);
6 });

然后Cake接收一个名为 ShowsDescription 的参数,运行Powershell或者bash的时候可以传递-ShowDescription来显示Task的信息。为了方便输入,我把ShowDescription改成了Help(仅更改了build.ps1中传递参数的名称)。

1.2 Cake.exe 和 Cake.CoreCLR

Cake目前有两个版本(参见Cake Releases):

  1. Cake.exe是面向net461的,可以在winodws上直接运行;也可以在linux上借助 mono cake.exe (Mono已经实现net47)来运行。
  2. Cake.CoreCLR(0.26版本以后开始支持.net core 2的,之前是.net core 1.1)面向.netcore的,可以使用 dotnet cake.dll 来运行。

我们直接下载这两个nuget包,然后用7z解压一下(nupkg文件为zip):

cake.0.26.1.nupkg解压后如下:

在windows下可以直接通过console窗口来运行它:

cake.coreclr.0.26.1.nupkg解压后如下:

可以通过dotnet cake.dll来运行它:

2. Cake运行环境搭配

Cake脚本本身的跨平台(windows,linux,docker等)是借助于上面提到的cake.exe或cake.coreclr来实现的。基于这些,我们可以有如下的组合:

  1. windows:用powershell来引导执行cake.exe。
  2. windows:用powershell来引导执行dotnet cake.dll。
  3. linux:用bash来引导执行mono cake.exe。
  4. linux:用bash来引导执行dotnet cake.dll。
  5. docker:视docker镜像的os平台而定,从上面四个组合中选择一个。

由于目前dotnet cli本身的不健全,缺少独立于*.csproj文件之外来安装nuget包的命令,故而使得安装cake.coreclr变得非常恶心。参见两种变通方法:

  1. 借助外部工具下载cake.coreclr的nuget包:https://github.com/devlead/BitbucketPipelinesShield/blob/master/build.sh
  2. 构造一个临时的*.csproj文件,然后用dotnet restore来下载cake.coreclr的nuget包:https://gist.github.com/luigiberrettini/19a124d24af74039ae87065adb007e2c

故而目前在window平台下选择1,在其他平台下选择3比较合适,在docker下可以构建一个mone+dotnet的混合环境的image(https://hub.docker.com/r/lnhcode/dotnet2-mono5/)。

好消息是目前.net core的每日构建版已经添加了 dotnet install  和 dotnet install tool 的命令(https://github.com/dotnet/cli/blob/master/src/dotnet/commands/dotnet-install/InstallCommandParser.cs),可以直接用来安装nuget包。这个新功能会随着.net core 2.1的正式发布而到来。到时候就可以统一借助dotnet cli来安装cake.coreclr了。

3. 在不同的CI环境中执行相同的自动构建

cake的目的在于一次编写,可以运行在不同的构建环境和构建工具中。同时可以把构建脚本纳入到源代码管理中,而不是编写在某一特定的ci/cd工具中。正如这篇文章https://www.thoughtworks.com/radar/techniques/programming-in-your-ci-cd-tool中的观点一样。

借助Github提供的很多免费的CI服务,我在https://github.com/linianhui/cake.example上接入了3个CI服务。

3.1 Cake with AppVeyor

AppVeyor主要提供有windows的ci环境,我们只需要再github的项目根目录添加 appveyor.yml 文件,然后关联一下AppVeyor的服务即可。

1 version: 1.0.{build}
2 image: Visual Studio 2017
3 build: off
4 test_script:
5 - ps: ./build.ps1 -target test

上面的这个示例调用了build.ps1来运行测试https://ci.appveyor.com/project/linianhui/cake-example

3.2 Cake with Travis

Travis提供有linux的ci环境,同样的我们添加一个 .travis.yml 文件然后关联Travis的服务即可。

 1 language: csharp
 2 
 3 os:
 4   - linux
 5   
 6 mono: latest
 7 
 8 dotnet: 2.1.4
 9 
10 script:
11   - chmod +x ./build.sh
12   - ./build.sh -target=test

上面的这个示例的运行环境是linux,安装了mone和dotnet,然后调用了build.sh来运行测试https://travis-ci.org/linianhui/cake.example

3.3 Cake with Circle

Circle提供有docker的环境,同样的添加一个 .circleci/config.yml 文件然后关联Circle的服务即可。

 1 version: 2
 2 
 3 jobs:
 4   test:
 5     docker:
 6       - image: lnhcode/dotnet2-mono5
 7     steps:
 8       - checkout
 9       - run: chmod +x ./build.sh
10       - run: ./build.sh -target=test
11       
12 workflows:
13   version: 2
14   test:
15     jobs:
16       - test

上面的示例中我使用了自己定义的一个dotnet2-mono2的docker镜像,然后调用builds.sh来运行测试https://circleci.com/gh/linianhui/cake.example/tree/master。dotnet2-mono5的镜像位于:https://hub.docker.com/r/lnhcode/dotnet2-mono5/

4. 总结

以上简单的介绍了一下Cake的简介信息,和如何再不同的CI环境中使用Cake来维护一个相同的自动化构建的流程。如有错误,欢迎指正!

参考

dotnet2-mono5 的dockerfile:https://github.com/linianhui/dockerfiles/blob/master/dotnet2-mono5/Dockerfile

本文示例代码:https://github.com/linianhui/cake.example

不要再CI/CD中编程:https://www.thoughtworks.com/radar/techniques/programming-in-your-ci-cd-tool

 

作者: Blackheart
目录
相关文章
|
人工智能
P8969 幻梦 | Dream with Dynamic
P8969 幻梦 | Dream with Dynamic
180 0
|
前端开发
《the Great Gatsby》Day 26
Gatsby告诉Daisy,她只要说自己从未爱过Tom,便能就此解脱,幸福地和自己在一起;但是当Tom说出曾经的种种,回忆淹没了Daisy,她没办法违背自己的内心——她曾深爱过Tom。Daisy说自己还是会离开Tom,Tom情急之下说出了Gatsby光鲜外表背后的那些不光彩的勾当。Daisy再一次恳求Tom带她回家,Tom却让Gatsby开车送她
120 0
《The Great Gatsby》Day 22
《The Great Gatsby》Day 22 2.大概内容 一度是灯火通明的Gatsby家,在一个夏夜突然暗淡下来,那些怀着希望而来的人们,看到这副景象也都失望地离开了。。。Nick开始以为Gatsby生病了或是去了外地,后来才
105 0
《The Great Gatsby》Day 21
在Gatsby的又一次party上,Daisy和Tom也应邀前来参加,一位又一位女客涂脂抹粉,男女狂欢的热闹繁华夜场生活反射出当时赤裸裸的美国梦。Gatsby因Tom去勾搭其
192 0
《The Great Gatsby》Day 12
舞会快结束的时候,Jordan和Gatsby也从书房出来了,Jordan告诉Nick她刚刚听到了最不可思议的事,但是又故意卖关子不肯说说是什么;她被伙伴们簇拥着上了车,和Nick告别时叮嘱Nick一定要给她打电话,Nick和Gatsby道别后也回家了。生活一天天过去,Nick也渐渐爱上了纽约。
100 0
|
Windows
《The Great Gatsby》Day 16
Jordan向Nick讲述了一切:Gatsby和Daisy五年前就认识了,当时Gatsby是个军官,他们相爱了;然而Gatsby被调去海外,两人断了联系,Daisy之后便和Tom结婚了,结婚前夕Daisy收到了一封来信,十分伤心,灌醉了自己说着“改变主意了”,可她最终还是和Tom结婚了。Gatsby一直还爱着Daisy,所以想摆脱Nick邀请Daisy来家中喝下午茶,这样他就可以假装路过来见她一
176 0
《The Great Gatsby》Day 19
Daisy沉醉于Gatsby家的繁华和精致,又因这5年逝去的时光而黯然神伤;Gatsby望着Daisy,欣喜又惶恐,前不久他还只能凝望海湾对面的Daisy家的那道绿光,期盼能与她充分,现在Daisy却离自己那么近,一切幸福显得有点不真实。
155 0
《The Great Gatsby》Day 20
让Nick感到惊讶的是Tom Mr.Sloane和一个穿着马术服装的女子骑着马来到了Gatsby家,女子还邀请Gatsby和Nick去她家共进晚餐。Tom不放心Daisy自己一个人到处走动,便陪着她来到了Gatsby的一个聚会,聚会上Tom又是一如既往地到处调情,但这也同时给Daisy和Gatsby单独相处的机会
124 0
《The Great Gatsby》Day 15
Gatsby向Nick介绍了他的朋友Mr.Wolfsheim,Mr.Wolfsheim和Nick聊了一会就走了,Gatsby告诉Nick他就是当年操纵棒球联赛“黑袜联赛”的人。Nick发现Tom也在餐厅,带Gatsby过去打招呼,但是Gatsby看见
136 0
《The Great Gatsby》Day 18
Gatsby进屋后,尴尬又紧张地依靠在壁炉旁,不知该如何打破沉默,Nick看到两人都很拘谨的样子,说自己有点事就出门了。Nick回屋时看到Gatsby和Daisy正坐在沙发上小声而热切地交谈着,含情脉脉地望着对方,连Nick回来都不知道。雨停后,Gatsby又邀请Daisy和Nick去自己家参观。 3.好词佳句 (1)The rain was still falling,but the darknes
131 0

热门文章

最新文章