[Cake] 0.C#Make自动化构建-简介

简介: 0. Cake是什么? Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。 熟悉大名鼎鼎的Make的小伙伴,应该已经知道Cake大致是个什么样的工具了,Cake具有以下几个特点: 方便编写:使用基于C#的DSL,非常易于编写自动化的脚本。

0. Cake是什么?

Cake是C# Make的缩写,是一个基于C# DSL的自动化构建系统。它可以用来编译代码,复制文件以及文件夹,运行单元测试,压缩文件以及构建Nuget包等等。

熟悉大名鼎鼎的Make的小伙伴,应该已经知道Cake大致是个什么样的工具了,Cake具有以下几个特点:

  1. 方便编写:使用基于C#的DSL,非常易于编写自动化的脚本。
  2. 跨平台: 基于Roslyn和Mono来编译我们写的自动化脚本,使得它可以运行在windows,linux,mac上。
  3. 可靠的:可以建立在自己的机器上,也可以建立在像AppVeyor,TeamCity,TFS,VSTS或Jenkins这样的CI系统上,都可以以相同的方式运行。
  4. 丰富的工具集:支持MSBuild,MSTest,xUnit,NUnit,Nuget,ILMerge,Wix和SignTool等等,以及支持丰富的插件(Cake Addins)。
  5. 开源:基于MIT开放源代码(Cake on Github),并且是.NET 基金会支持的一个项目(Cake on dotnet foundation)。

1. 一个简单的DEMO

笔者在Github上创建了一个简单的DEMO(cake.demo),下面简单的介绍,项目非常简单,一个类库项目,一个测试项目,如下:

1.1 下载引导脚本

首先第一步下载一个基于Powershell的引导脚本文件build.ps1,这个文件并不是必须的,你可以直接用调用cake脚本文件),在项目所在的目录下运行: Invoke-WebRequest http://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1 

备注:当前笔者是基于windows平台,开发环境是vs 2017 community:

linux : curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/linux

mac  : curl -Lsfo build.sh http://cakebuild.net/download/bootstrapper/osx

1.2 创建Cake脚本

添加一个文本文件build.cake(文件名随意,笔者懒调整build.ps1中指定的cake脚本文件而已。完整文件:https://github.com/linianhui/cake.demo/blob/master/build.cake)

这一步我们用Cake来build以下我们上面的cake.demo这个项目。文件内容如下:

 1 /// args
 2 var target = Argument("target", "default");  3  4  5 /// build task  6 Task("build")  7 .Does(() =>  8 {  9 MSBuild("./cake.demo.sln", new MSBuildSettings{ 10 Verbosity = Verbosity.Minimal 11  }); 12 }); 13 14 15 Task("default") 16 .IsDependentOn("build"); 17 18 19 /// run task 20 RunTarget(target);

脚本可以说是非常简单易懂,相信有C#基础的应该非常容易理解。

  1. 首先,创建了一个参数target(名字和build.ps1中指定的参数名一致),默认值是“default”。
  2. 其次,创建了一个名为build的Task,这个task调用MSBuild来build我们的项目。
  3. 然后,创建了一个名为default的task,它什么都没干,只是标识说我依赖一个为build的task,含义就是在运行default的task之前,会先运行build的task。
  4. 最后,用RunTarget来运行指定名字的task。

OK,我们来运行一下build.ps1(初次运行它会下载cake所需的一些文件,这些文件会存放于build.ps1中指定的文件夹,默认是tools文件夹,感兴趣的可以看一看build.ps1里面干了什么)。咦,运行出错了!

原因是我的一个Demo.Tests这个项目引用了xUnit的包,MSBuild没能正确的还原nuget包,这不知道算不算一个bug,笔者之前用 Cake的MSBuild来build vs2015的项目的时候是没有问题的,当前环境只安装了VS2017。不过也正好,我们再用Cake来写一个还原nuget包的task。

1 /// nuget task 2 Task("restore-nuget-packages") 3 .Does(() => 4 { 5 NuGetRestore("./cake.demo.sln"); 6 });

再运行一次:

这次可以了。

然后我们再依次的添加几个task,清理build的文件:

1 Task("clean")
2     .Does(() =>
3 {
4     CleanDirectories("./src/*/bin");
5     CleanDirectories("./test/*/bin");
6 });

运行单元测试:

1 /// unit-test task
2 Task("unit-test")
3     .IsDependentOn("build")
4     .Does(() =>
5 {
6     XUnit2("./test/*/bin/*/*.Tests.dll");
7 });

然后运行一下:

1.3 build.ps1

在前面我们提到这个文件并不是必须的文件,而是用它来下载Cake所需要的相关文件,以及设置默认的Cake配置。再者,我们可以通过它来简化对Cake的调用,比如上面列出来的几个task,我们可以通过传递参数给build.ps1,来运行我们指定的task(默认运行了default嘛)。比如:

仅清理项目的build生成的文件。

2. 总结

得益于Cake基于C#DSL来编写脚本,相比写Powershell或者其他的脚本来完成自动化构建,使得C#开发人员非常容易上手。

其次Cake基于Roslyn和Mono,使得它可以提供跨平台的自动化构建,也可以运行在各种常用的CI系统之上。

再者Cake提供了丰富的内建工具集以及插件(Cake Addins),可以满足我们绝大部分的自动化构建需求,比如,编译,测试,打包,部署等等。

例如前些日子我的一个web的demo项目(https://github.com/linianhui/Ids3.demo)使用cake来部署iis站点。

3. 参考资料

Make

C# Make

Cake Addins

Cake on Github

Cake on dotnet foundation

cake.demo

http://cakebuild.net/docs/tutorials/getting-started

http://cakebuild.net/docs/resources/videos

https://github.com/cake-build/example

 

作者: Blackheart
目录
相关文章
|
2月前
|
监控 jenkins 测试技术
自动化测试框架的构建与实践
【10月更文挑战第40天】在软件开发周期中,测试环节扮演着至关重要的角色。本文将引导你了解如何构建一个高效的自动化测试框架,并深入探讨其设计原则、实现方法及维护策略。通过实际代码示例和清晰的步骤说明,我们将一起探索如何确保软件质量,同时提升开发效率。
54 1
|
2月前
|
测试技术 开发者 Python
自动化测试之美:从零构建你的软件质量防线
【10月更文挑战第34天】在数字化时代的浪潮中,软件成为我们生活和工作不可或缺的一部分。然而,随着软件复杂性的增加,如何保证其质量和稳定性成为开发者面临的一大挑战。自动化测试,作为现代软件开发过程中的关键实践,不仅提高了测试效率,还确保了软件产品的质量。本文将深入浅出地介绍自动化测试的概念、重要性以及实施步骤,带领读者从零基础开始,一步步构建起属于自己的软件质量防线。通过具体实例,我们将探索如何有效地设计和执行自动化测试脚本,最终实现软件开发流程的优化和产品质量的提升。无论你是软件开发新手,还是希望提高项目质量的资深开发者,这篇文章都将为你提供宝贵的指导和启示。
|
8天前
|
人工智能
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
LangGraph 是一个基于图结构的开源框架,专为构建状态化、多代理系统设计,支持循环、持久性和人工干预,适用于复杂的工作流自动化。
41 12
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
|
1月前
|
人工智能 自然语言处理 JavaScript
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
Agent-E 是一个基于 AutoGen 代理框架构建的智能自动化系统,专注于浏览器内的自动化操作。它能够执行多种复杂任务,如填写表单、搜索和排序电商产品、定位网页内容等,从而提高在线效率,减少重复劳动。本文将详细介绍 Agent-E 的功能、技术原理以及如何运行该系统。
93 5
Agent-E:基于 AutoGen 代理框架构建的 AI 浏览器自动化系统
|
23天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
28天前
|
缓存 监控 安全
公司电脑监控软件的 Gradle 构建自动化优势
在数字化办公环境中,公司电脑监控软件面临代码更新频繁、依赖管理和构建复杂等挑战。Gradle 构建自动化工具以其强大的依赖管理、灵活的构建脚本定制及高效的构建缓存与增量构建特性,显著提升了软件开发效率和质量,支持软件的持续更新与优化,满足企业对员工电脑使用情况的监控与管理需求。
37 3
|
1月前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
67 9
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
45 5
|
2月前
|
jenkins 测试技术 持续交付
自动化测试框架的构建与优化:提升软件交付效率的关键####
本文深入探讨了自动化测试框架的核心价值,通过对比传统手工测试方法的局限性,揭示了自动化测试在现代软件开发生命周期中的重要性。不同于常规摘要仅概述内容,本部分强调了自动化测试如何显著提高测试覆盖率、缩短测试周期、降低人力成本,并促进持续集成/持续部署(CI/CD)流程的实施,最终实现软件质量和开发效率的双重飞跃。通过具体案例分析,展示了从零开始构建自动化测试框架的策略与最佳实践,包括选择合适的工具、设计高效的测试用例结构、以及如何进行性能调优等关键步骤。此外,还讨论了在实施过程中可能遇到的挑战及应对策略,为读者提供了一套可操作的优化指南。 ####
|
2月前
|
敏捷开发 监控 测试技术
探索自动化测试框架的构建与优化####
在软件开发周期中,自动化测试扮演着至关重要的角色。本文旨在深入探讨如何构建高效的自动化测试框架,并分享一系列实用策略以提升测试效率和质量。我们将从框架选型、结构设计、工具集成、持续集成/持续部署(CI/CD)、以及最佳实践等多个维度进行阐述,为软件测试人员提供一套系统化的实施指南。 ####