.Net CI/CD 之 Cake初探

294 阅读2分钟

What is Cake?

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

  1. 下载build.ps1脚本,URL:github.com/cake-build/…

      Invoke-WebRequest https://raw.githubusercontent.com/cake-build/resources/master/dotnet-framework/build.ps1 -Outfile build.ps1
    
  2. Powershell执行脚本build.ps1,会下Cake到tools目录下

      .\build.ps1 
    
  3. 创建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 排版