利用FlubuCore用C#来写持续集成和持续部署脚本
前言
随着近些年微服务的流行,有越来越多的开发者和团队所采纳和使用,它的确提供了很多的优势也解决了很多的问题,但是我们也知道也并不是银弹,提供优势的同时它也给我们的开发人员和团队也带来了很多的挑战。
为了迎接或者采用这些新技术,开发团队需要更加注重一些流程或工具的使用,这样才能更好的适应这些新技术所带来的一些问题。 对于流程行问题,敏捷的Scrum能够很好的提升产品开发团队之间的协作问题,那么对于应用变的越来越复杂这种情况,它最直接的问题就是带来了开发运维的复杂性,这个时候我们就需要使用工具来解决了。
开发运维的复杂性
从字面意思可以看出开发运维的复杂性指的是开发的复杂以及运维的复杂,然后我们具体来说一下到底是怎么复杂的。
我们先说开发的复杂性, 应用由单体变成分布式,需要处理分布式系统遇到的所有问题。 我在之前的博客里面大致都说过遇到的一些挑战,感兴趣的同学可以跳过去看下。
除此之外就是遇到的另外一个也会导致变得复杂就是应用的构建和发布以及部署,因为涉及到的服务特别多就带来了很多的问题,所以遇到的这些问题你可以认为应该开发处理也可以认为应该运维处理,那么就合在一起叫开发运维问题吧。
针对这种开发运维问题,业内提出了DevOps支持。
DevOps
DevOps (Development和Operations的组合词),他是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
这种整合在微服务团队变得尤其重要,在整合的过程中需要用到很多的一些工具来解决遇到的问题,总之一图胜千言。

从上图可以看出在 Build 和 CI/CD 阶段需要用到很多的工具,我们需要写脚本对这些工具进行调用以便于让他们能够协同工作,通常我们会使用 shell 脚本,然后来调用这些工具提供的 cli 命令行,然后由构建平台来触发,比如 Jenkins 或者 GitLab CI, Team City 等等。
那么对于不熟悉 shell 的同学,或者觉得使用 shell 效率太低又不方便维护有没有其他的工具可以使用呢,最好是C#可以直接写? 答案当然是有的,今天就给大家强烈推荐一款利器 FlubuCore.
FlubuCore 是什么?

FlubuCore 是一个跨平台的自动化构建和部署系统,用于使用C#代码构建项目和执行部署脚本。
Github: https://github.com/dotnetcore/FlubuCore
文档:https://flubucore-zh.dotnetcore.xyz/
FlubuCore 基于 MIT 协议开源,目前已经是 .NET Foundation 基金会项目成员,作者(Marko Zorec)也是我们 NCC 的核心项目成员之一。
现在你可以利用 C# 去编写构建和部署脚本,同时支持 .NET Framework 和 .NET Core,不需要再去学习其他工具或语言了,而且 FlubuCore 提供了一套 Fluent 式的 API,让你写起来根本停不下来。 看图:

香不香? 快去 Github 点个 Star 支持一下吧,你的一个小小的 Star 也是对整个 .NET 生态的贡献。
FlubuCore Getting Started
虽然 FlubuCore 提供的有中文的 Readme,不过我还是简单的带大家入个门吧。
1. 安装全局命令行工具
打开 CMD 执行一下命令:
dotnet tool install --global FlubuCore.GlobalTool
这个命令的主要作用是安装一个全局的命令行工具,持续集成的平台后续就可以利用 flube 这个命令行工具来执行C#自定义的脚本。
2. 新建一个空的解决方案
mkdir FlubuTest
cd FlubuTest
dotnet new sln
mkdir src
cd src
mkdir mywebapp
cd mywebapp
dotnet new webapp
dotnet sln ../../FlubuTest.sln add ./mywebapp.csproj
觉得麻烦的,Visual Studio 直接新建就可以搞定了。
3. 添加 Flubucore 构建项目
先切换到第2步的解决方案根目录 cd ../../,然后创建build的入口项目:
dotnet new -i FlubuCore.Template
dotnet new FlubuCore
dotnet sln FlubuTest.sln add ./BuildScript/BuildScript.csproj
将 FlubuCore 添加到解决方案主要是后续编写脚本的方便,借助于 VisualStudio 的智能提示等就像编写C#代码一样了,实际上就是C#代码, 当然也可以选择不添加到项目中。
最后的文件夹结构大概是这个样子的:
│──FlubuTest.sln
│
└──BuildScript
│ │ BuildScript.cs
│ │ BuildScript.csproj
└─src
└─mywebapp
│ appsettings.Development.json
│ appsettings.json
│ mywebapp.csproj
│ Program.cs
│ Startup.cs
4. 修改 BuildScript.cs 文件
打开 BuildScript/BuildScript.cs 然后将
context.Properties.Set(BuildProps.SolutionFileName, "Todo");
Todo 修改为解决方案的名字
context.Properties.Set(BuildProps.SolutionFileName, "FlubeTest.sln");
BuildProps 这个对象主要提供了在构建的过程中一些上下文信息,通过设置此对象你可以给flubu 提供更多信息以便于后续的使用等。
5. 开始使用
在项目根目录打开 cmd, 然后使用下面的命令来编译你的项目。
flubu compile
其中 compile 就是文件 _Build/BuildScript/BuildScript.cs 的这段代码里面的 compile,你可以随意更改,只需要和命令保持一致。
protected override void ConfigureTargets(ITaskContext context)
{
var compile = context.CreateTarget("compile")
.SetDescription("Compiles the solution.")
.AddCoreTask(x => x.Build());
}
后面基本上你需要的构建的所有的东西都可以写到 ConfigureTargets 里面了。
最后的输出:
D:\FlubuTest>flubu compile
Flubu v.4.3.5.0
Build script file name was not explicitly specified, searching the default locations:
Found it, using the build script file 'BuildScript/BuildScript.cs'.
Executing target compile
Executing task DotnetBuildTask
Running program 'C:\Program Files\dotnet\dotnet.exe':(work.dir='',args=' build FlubuTest.sln')
用于 .NET Core 的 Microsoft (R) 生成引擎版本 16.6.0+5ff7b0c9e
版权所有(C) Microsoft Corporation。保留所有权利。
正在确定要还原的项目…
所有项目均是最新的,无法还原。
BuildScript -> D:\FlubuTest\BuildScript\bin\Debug\netcoreapp2.1\BuildScript.dll
mywebapp -> D:\FlubuTest\src\mywebapp\bin\Debug\netcoreapp3.1\mywebapp.dll
mywebapp -> D:\FlubuTest\src\mywebapp\bin\Debug\netcoreapp3.1\mywebapp.Views.dll
已成功生成。
0 个警告
0 个错误
已用时间 00:00:02.51
compile finished (took 3 seconds)
BUILD SUCCESSFUL
Build finish time: 2020/7/4 0:47
Build duration: 00:00:03 (3 seconds)
可能有人会问,这和我用 dotnet build FlubuTest.sln 有区别吗?
针对这个示例而言,是没区别,但是你可以自己扩展啊,扩展后不就有区别了。比如你想build之前先清理文件夹之类的,可以这么写。
var compile = context.CreateTarget("compile")
.SetDescription("Compiles the solution.")
.AddCoreTask(x => x.Clean())
.AddCoreTask(x => x.Build());
借助于 flubu 提供的能力,可以在 CI/CD 界面解决很多复杂的构建问题。
总结
上面的仅仅是一个入门,如果你觉得你们项目刚好需要那么你可以去官方的文档去查看,里面有更加详细的使用指南,当然也可以在这个博客下面留言或者去GitHub提交issue询问。
GitHub: https://github.com/dotnetcore/FlubuCore
FlubuCore 给我们提供了一种可以快速编写 DevOps 脚本的能力,利用这种能力可以让DevOps变得更加简单和高效,从而提高效率节约时间。
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
本文地址:http://www.cnblogs.com/savorboard/p/flubucore.html
作者博客:Savorboard
利用FlubuCore用C#来写持续集成和持续部署脚本的更多相关文章
- Jenkins持续集成-自动化部署脚本的实现
要实现Jenkins端的持续集成,其实在CI服务配置端很容易,难点呢?就是如何实现自动化的部署.我的脚本设计就是为了解决以下难题: 难点一.如何使得自动化部署脚本更通用 我用的脚本,依赖依赖一个配置文 ...
- 《转载》Jenkins持续集成-自动化部署脚本的实现《python》
本文转载自慕课网 读者须知:1.本手记本着记续接前面的两张手记内容整理2.本手记针对tomcat部署测试环境实现 最近工作比较繁忙,导致这章一直拖延,没有太抽出时间来总结.要实现Jenkins端的持续 ...
- 利用Travis CI+GitHub实现持续集成和自动部署
前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...
- Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署
一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...
- 使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
- Android持续集成之Jenkins 部署
Android持续集成之Jenkins 部署 [TOC] 0x00安装 准备工作如下: Tomcat8.5下载地址 Jenkins下载链接 1 将下载的jenkins.war包放至tomcat下的we ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(二):部署
前面又是废话 我之前写过: Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署 Asp.Net Core 程序部署到Linux(centos)生产环境(二):doc ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
2019/1/31更新,经过我一段时间的使用 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用d ...
- .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统
.NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...
随机推荐
- Python中的三种等待时间
一.强制等待 不论页面是否加载完成,都要等待指定时间才能执行下一步, 单位秒,time.sleep(5) import time time.sleep(10) # 强制等待10秒时间 二.隐式等待( ...
- shell中文本内容多行变一行的技巧
在linux下有时可能需要将多行的值转成一行.其实现的方法有很多种.笔者将自己曾经用过的方法在些分享. 如有一文本文件5201351.txt,文本的内容如下: 现我们可以通过如下方法将文本内容转成一行 ...
- 彻底搞懂 etcd 系列文章(二):etcd 的多种安装姿势
0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...
- STL中的set和multiset
注意: 1.count() 常用来判断set中某元素是否存在,因为一个键值在set只可能出现0或1次. 2.erase()用法 erase(iterator) ,删除定位器iterator指向的值 ...
- TCP协议“三次握手”与“四次挥手”详解(下)
前面进行“三次握手”建立连接后,当客户端的数据发送完毕,它就会要求与服务器端断开连接,那么就要进行“四次挥手”进行连接的释放. 注意,此处所谓的“客户端”与“服务器端”,只是为了方便标识连接的双方,即 ...
- Istio的运维-诊断工具(istio 系列五)
Istio的运维-诊断工具 在参考官方文档的时候发现环境偶尔会出现问题,因此插入一章与调试有关的内容,便于简单问题的定位.涵盖官方文档的诊断工具章节 目录 Istio的运维-诊断工具 使用istioc ...
- C# 反射与特性(十):EMIT 构建代码
目录 构建代码 1,程序集(Assembly) 2,模块(Module) 3,类型(Type) 4,DynamicMethod 定义方法与添加 IL 前面,本系列一共写了 九 篇关于反射和特性相关的文 ...
- 短短1天我学会了如何修改Butterfly的配置文件
目录 一.修改默认语言 二.创建标签.分类.关于和留言版页面 三.添加搜索框 四.飘带背景 五.使用Valine添加评论功能并支持邮箱提醒 六.收录谷歌.百度 一.修改默认语言 说明:安装Butter ...
- (二)JavaMail创建包含内嵌图片的邮件
链接:https://blog.csdn.net/qq_41151659/article/details/96475739 代码如下: import com.sun.mail.util.MailSSL ...
- ESP8266局域网智能家居 路由器下作服务器模式串口透传 无线通信控制 arduino uno示例 模板参考
准备工作 下载一个Arduino IDE, 下载8266的库文件 ESP8266服务器模式串口透传编译 功能说明 1.直接使用路由器中转数据 2.手机放热点模式直接传输数据 两者有访问IP地址的差别, ...