[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
目录
相关文章
|
算法 Java
ARTS打卡
ARTS打卡
[USACO 2009 Dec S]Music Notes
[USACO 2009 Dec S]Music Notes
UVa11506 - Angry Programmer(ISAP)
UVa11506 - Angry Programmer(ISAP)
65 0
|
人工智能 关系型数据库 Go
PRML Chapter01 练习题Exercise
PRML Chapter01 练习题Exercise
PRML Chapter01 练习题Exercise
The 15th Chinese Northeast Collegiate Programming Contest C. Vertex Deletion(树形dp)
The 15th Chinese Northeast Collegiate Programming Contest C. Vertex Deletion(树形dp)
117 0
Google Earth Engine ——Landsat 8 Annual BAI Composite
Google Earth Engine ——Landsat 8 Annual BAI Composite
97 0
Google Earth Engine ——Landsat 8 Annual BAI Composite
|
人工智能
Practical Skill Test——AT
题目描述 We have a grid with H rows and W columns. The square at the i-th row and the j-th column will be called Square (i,j). The integers from 1 through H×W are written throughout the grid, and the integer written in Square (i,j) is Ai,j.
114 0
|
存储
HDOJ/HDU 1073 Online Judge(字符串处理~)
HDOJ/HDU 1073 Online Judge(字符串处理~)
89 0
|
消息中间件 数据建模
题解 P1339 【[USACO09OCT]热浪Heat Wave】
题目链接 这道题纯属是一个裸的SPFA;建议先把模板AC之后再做。只需要做一些手脚,就是在加边的时候加一个双向边就好。然后再第一次加点的时候看不懂模板的出门左转度娘。推荐下面一片讲解:友链所以说,直接上代码。
1150 0
|
前端开发 数据库 关系型数据库
Nancy简单实战之NancyMusicStore(六):写在最后
原文:Nancy简单实战之NancyMusicStore(六):写在最后 前言 由于公司搬家后,住的地方离上班的地方远了N倍,以前是走路十多分钟就可以到公司的,上班时间也从9:00提早到8:30 现在每天上班都是先坐公交,然后再坐地铁,在这段路上比较浪费时间而且每天都是要6:30起床,22:45左右睡觉 保证充足的睡眠,这样才能保证上班有精神。
919 0

热门文章

最新文章