Cake (C# Make) is a free and open source cross-platform build automation system with a C# DSL for tasks such as compiling code, copying files and folders, running unit tests, compressing files and building NuGet packages.
.Net开发中经常需要将软件集成到CI/CD中,这就需要脚本实现编译,单元测试,打包,传统的做法是使用Batch/Powershell脚本,这对于不熟悉的开发者来说有些困难(既难以实现复杂逻辑,也难以维护),而Cake正好可以解决这些痛点。
Cake文件结构
-
build.ps1 // powershell脚本,用于调用动cake.exe执行Cake中的逻辑
-
build.cake // Cake脚本文件,纯C#代码,一个build.cake文件可以认为是一个C#类
- tools\cake Cake依赖环境,包括cake.exe
安装Cake
-
下载build.ps1脚本,URL:github.com/cake-build/…
Invoke-WebRequest https://raw.githubusercontent.com/cake-build/resources/master/dotnet-framework/build.ps1 -Outfile build.ps1 -
Powershell执行脚本build.ps1,会下Cake到tools目录下
.\build.ps1 -
创建build.cake文件
编辑Cake脚本(build.cake)
完整的Cake.build可以在 DotNetty项目中看到:github.com/Azure/DotNe…
build.cake文件结构:
// using:微软常用的命名空间可以直接导入,第三方的需要先将Dll添加到`tools\cake`目录下,再添加引用
using System.Xml;
// Arguments:定义输入Cake输入参数,Argument<参数类型>(参数名, 默认值);
// 调用方式:.\build.ps1 -参数名 参数
// Sample: .build.ps1 --target test --platform x86
var target = Argument<string>("target", "Default");
var platform = Argument<PlatformTarget>("platform", PlatformTarget.x64);
// Variables:变量,等同于在C#类中定义的局部变量
var csProjectFiles = GetFiles("./src/**/*.csproj");
// 自定义方法
private string DoSomething()
{
// TODO
}
// Task:Cake执行最小单元,通过参数`target`控制 .\build.ps1 -target Test
// 如果需要控制是否执行,可以通过 WithCriteria 设置
// 如果需要依赖其他Task,可以通过 IsDependentOn 设置
//
Task("Test")
.Description("Executes xUnit tests")
.WithCriteria(!skipTests)
.IsDependentOn("Compile")
.Does(() =>
{
// DO
});
// 用于执行指定Task,在文件末尾,不可缺失!!!
RunTarget(target);
执行Cake脚本
Powershell执行 build.ps1,参数根据build.cake中 Arguments 中定义输入
.\build.ps1 --target Compile --nogit true
本文使用 markdown.com.cn 排版