通过 Nuke 为 Dotnet Core 应用构建自动化流程
为什么使用Nuke
最开始了解Nuke,是浏览github时,刷到了这个项目,看简介可以通过C# 来定义构建任务和流程,这一点很新颖,对我来讲,c# 显然更容易理解和维护。
再看给出的示例,确实比较清晰,简洁。看了下官方文档,也提供了大量第三方CLI的支持,工具支持比较好,也就是可以使用C#方法调用,代替直接使用cli 命令。
还可以与 gitlab jenkins 结合,实现CI、CD,兼容windows 与 linux。
看文档介绍,是不错的,对于缺少运维人员的团队,可以尝试使用。
示例场景
- 为同一个解决方案下的多个Dotnet Core 项目构建dokcer镜像
- 使用Gitversion的版本策略,生成镜像标签
- 并推送至镜像仓库
逻辑比较简单,可以拆分为,通过 gitversion 生成版本号,通过docker build 生成镜像,以及通过docker push 推送镜像。
Nuke 初始化
按需安装Nuke 版本,以及在项目跟目录下,进行初始化。
dotnet tool install Nuke.GlobalTool --global
nuke :setup
调整构建流程
通过 LoginDocker 实现了登录docker镜像仓库;
通过 BuildDockerImages 实现了多个项目的镜像构建,并采用 GitVersion 的 FullSemVer 作为版本号,构建时启用了DOCKER_BUILDKIT;
通过 PushImages 实现了镜像推送;
通过 CleanImages 清除本地镜像;
using System;
using System.Collections.Generic;
using System.Linq; using Nuke.Common;
using Nuke.Common.ProjectModel;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.Docker;
using Nuke.Common.Tools.GitVersion; using Serilog; using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.Tools.Docker.DockerTasks; class Build : NukeBuild
{
[GitVersion] readonly GitVersion GitVersion;
[Solution] readonly Solution Solution;
[Parameter(Name = "proj")] readonly string ProjectName; public Build()
{
DockerLogger = (s, e) => Log.Debug(e);
} public static int Main() => Execute<Build>(x => x.RunDockerTasks);
string RegistryUrl => "registry.mydomain.com";
string ImagePrefix => $"{RegistryUrl}/products"; IEnumerable<Project> Projects => Solution.AllProjects.Where(p => p.Name.EndWith("Host")); readonly List<string> localImages = new(); Target LoginDocker => _ => _
.Executes(() =>
{
DockerLogin(_ => _
.SetServer(RegistryUrl)
.SetUsername("xxx")
.SetPassword("xxxxx"));
}); Target BuildDockerImages => _ => _
.Executes(() =>
{
foreach (var project in Projects)
{
var tag = $"{ImagePrefix}{project.Name}:{GitVersion.FullSemVer}";
localImages.Add(tag);
DockerBuild(_ => _
.SetProcessEnvironmentVariable("DOCKER_BUILDKIT", "1")
.SetPath(“./”)
.SetFile(project.Directory / "Dockerfile")
.SetTag(tag));
}
}); Target PushImages => _ => _
.DependsOn(BuildDockerImages)
.DependsOn(LoginDocker)
.Executes(() =>
{
foreach (var image in localImages)
{
DockerPush(_ =>
_.SetName(image));
}
}); Target CleanImages => _ => _
.DependsOn(PushImages)
.Executes(() =>
{
foreach (var image in localImages)
{
DockerImageRm(s => s
.SetImages(image)
.SetForce(true));
}
}); Target RunDockerTasks => _ => _
.DependsOn(CleanImages)
.Executes(() =>
{
Serilog.Log.Information($"{ProjectName} 构建结束");
});
}
调试
本地运行代码,既可以执行以上逻辑,以及调试;非常方便。
调用
通过 执行命令行:dotnet nuke RunDockerTasks 即可执行镜像的构建与推送,可以很方便的与gitlab、github、jenkins 等结合。
优化
- 执行以上CI,需要宿主机,安装Dotnet SDK,以实现 Dotnet tools 的安装,以及Docker 客户端的安装;可以考虑使用Docker In Docker的方式,减少对服务器的要求;
- 默认会对所有的项目进行构建并推送,可以结合 Parameter 的方式,按需指定需构建的项目;
- 可以使用compose 方式构建,隐藏项目细节;
总结
对于功能不复杂、脚本不熟悉、或者缺少运维的场景下,可以尝试使用。
通过 Nuke 为 Dotnet Core 应用构建自动化流程的更多相关文章
- 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(下)
写在前面 本篇文章是上一篇边缘化搭建 DotNet Core 2.1 自动化发布和部署(上)的后续操作,本文主要讲解如何开启Docker Remote API,开启Remote API后的权限安全问题 ...
- 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(上)
写在前面 写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器.服务器上搭建了 Centos7 & Docker & Jenki ...
- windows jenkins dotnet core 自动化构建webapi
jenkins环境搭建好 注意一下几点: - 需要安装git - 需要安装dotnet core sdk环境 - 遇到这里报错,提示 Repository URL 错误的话,如果确实没有配置错误,重启 ...
- Jenkins 构建自动化 .NET Core 发布镜像
Jenkins 构建自动化 .NET Core 发布镜像 导读 在本章中,将介绍如何在 Linux 下使用 Docker 部署.启动 Jenkins,编写脚本,自动化构建 .NET Core 应用,最 ...
- 本地Docker Jenkins构建dotnet core web应用到Linux服务器 Docker上
1.准备工作 环境 本地: Windows.Docker 代码仓库:Git 服务器:Linux.Docker 前提准备 创建个有dockerfile文件的dotnet core 3 web项目 新建一 ...
- 流程自动化RPA,Power Automate Desktop系列 - DotNet Core打包并发布Nuget Package
一.背景 DotNet Core通常基于Nuget来实现包管理,如果你想要把自己的实现共享给其他人,通常我们需要把本地项目打包好,然后发布到对应的Nuget Server上,以便于其他人可以查找.安装 ...
- Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(2)
上一篇:Ubuntu & GitLab CI & Docker & ASP.NET Core 2.0 自动化发布和部署(1) 服务器版本 Ubuntu 16.04 LTS. 本 ...
- 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)
作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...
- 手把手教你用Jenkins自动发布dotnet core程序
Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安装教程略.... 嗯?不是说好手把手么 ...
- devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务
使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...
随机推荐
- [SDOI2008] Sandy的卡片 题解
讲一种自认为最暴力的方法. 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串. 这里我们对于每一个子串开一个大小为 \(n\) ...
- ssh远程连接linux服务器
Linux,ssh远程连接 一. linux端配置 1.安装ssh服务 sudo apt-get update sudo apt-get install openssh-client sudo apt ...
- Kettle - 使用案例
原文链接:https://blog.csdn.net/gdkyxy2013/article/details/117106691 案例一:把seaking的数据按id同步到seaking2,seakin ...
- 公众号已上线 Ask AI 功能
Get新技能,给公众号接入AI智能体,没花一分钱. 不禁感慨这时代的进步也太快了,曾经科幻小说中描绘的未来已成现实! 下面是笔者在腾讯元宝中创建的智能体"鲸鱼小助手": 如果今后要 ...
- 震撼揭秘:LLM幻觉如何颠覆你的认知!
LLM幻觉 把幻觉理解为训练流水线中的一种涌现认知效应 Prashal Ruchiranga Robina Weermeijer 在 Unsplash 上的照片 介绍 在一个名为<深入剖析像Ch ...
- 【markdown】各种markdown的骚操作
目录 1.给图片居中.加题注 2. 文字添加下划线 3. 文字高亮.自定义高亮的颜色 4. 博客文章生成目录 5. markdown 实现页内跳转 6. 数学公式调大尺寸.右编号 7. 折叠内容 8. ...
- Win10 非正常断电重启后出现长时间磁盘100%活动占用
老毛病,以往半个小时左右会正常,这次上电1s发现风扇被卡马上关机,在启动结果硬生生卡了1h:应该是触发了微软某些后台的某些服务进程,记录一下 可疑涉事进程记录: svchost:Win服务主进程,是层 ...
- npm 如何更新项目最新依赖包
NPM 是什么? Node 软件包管理器(NPM)提供了各种功能来帮助你安装和维护项目的依赖关系. 由于错误修复.新功能和其他更新,依赖关系可能会随着时间的推移而变得过时.你的项目依赖越多,就越难跟上 ...
- Destination host unreachable 一般解决办法
症状: 上网各类应用基本正常,但是在命令行下使用ping命令,无论任何地址,均反馈Destination host unreachable. 分析: 输入命令arp -a可以看到网关的MAC地址正常解 ...
- 【Java】Math类的基本操作
Math类 Math 类是数学操作类,提供了一系列的数学操作方法,包括求绝对值.三角函数等,在 Math 类中提供的一切方法都是静态方法(类方法),所以直接由类名称调用即可. Math类的基本操作: ...