开发.NET Core NuGet包并实现CI/CD
实际开发中我们需要对一些公共类库进行开发,并基于Jenkins进行CI/CD(CI:持续集成,CD:持续部署),其他项目通过NuGet引用。上文讲述了如何搭建本地NuGet服务器并发布NuGet包,这里不再赘述。
CI/CD流程如下图:

首先公共类库代码通过Git管理,编辑完代码后上传到Git服务器。
配置Jenkins Job,按设定的触发条件进行构建任务。
构建开始,删除Workspace中旧文件,从Git服务器下载最新代码,执行编译,生成NuGet包,上传到NuGet服务器。
这样,别人就可以引用或者更新最新的公共类库的NuGet包进行业务开发了。
在Visual Studio中操作
- 自定义打包类库
新建一个.net core 的类库,在工程文件处右键,选择属性,在“打包”中勾选“在版本中生成NuGet包”,然后设置基本信息。如下图:

编译生成,就会在Debug/Release目录生成一个nupkg文件:

- 自动更新编译版本
关于版本号:
这里指Net Framework风格的版本号,
即,主版本号.子版本号[.编译版本号[.修订版本号]]
英文对照:
Major_Version_Number.Minor_Version_Number[.Build_Number[.Revision_Number]]
主版本号和次版本号是必选的;
编译版本号和修订号是可选的,但是如果定义了修订号部分,则编译版本号就是必选的。
所有定义的部分都必须是大于或等于 0 的整数。
应根据下面的约定使用这些部分:
Major :具有相同名称但不同主版本号的程序集不可互换。例如,这适用于对产品的大量重写,这些重写使得无法实现向后兼容性。
Minor :如果两个程序集的名称和主版本号相同,而次版本号不同,这指示显著增强,但照顾到了向后兼容性。例如,这适用于产品的修正版或完全向后兼容的新版本。
Build :编译版本号(内部版本号)的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。
Revision :名称、主版本号和次版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。
在Visual Studio中选择NuGet包管理器,搜索“MSBump”,安装,然后在工程文件下新建一个.msbump文件,写入如下代码:
{
Configurations: {
"Debug": {
BumpLabel: "dev",
LabelDigits: 4
},
"Release": {
BumpRevision: true,
ResetLabel: "dev"
}
}
}
上文表示:当编译配置为“Debug”时,版本号生成一个dev前缀后面跟四位数字的标签,数字从0001开始递增。当编译配置为“Release”时,修订版本号会+1,清除dev标签。当然,也可以直接在.msbump中这样写:
{
BumpRevision: true
}
意思就是每次编译不管debug还是release,都会使修订版本号+1
在Jenkins中操作
前提操作:
需要下载NuGet.exe,并且把NuGet.exe所在目录和MSBuild所在目录加入到环境变量中,这样方便在Jenkins中直接使用msbuild和nuget命令。
- 安装Jenkins
这里不再赘述,自行百度,就是安装Java那套环境
- 新建任务
新建任务,起个名字,选择“构建一个自由风格的软件项目”,点击“OK”:

- 编辑配置信息
我们用的是Git管理代码,所以源代码管理里选择Git,输入仓库地址和用户名密码,选择需要拉取的分支名称:

触发条件,可以根据自己的需求,比如每日定时调度:

编译环境中选择编译开始前清空Workspace,保证拉取最新代码不冲突:

编译步骤中,选择执行Windows批处理命令,主要执行如下操作:
1.进入工程文件目录
2.还原所有依赖的包
3.执行编译Release版本
4.进入Releas目录
5.将生成的nupkg文件推送到NuGet服务器
6.由于生成操作修改的修订版本号,所以将修改的文件提交
代码:
cd GAIA.GIS\
msbuild -t:restore
msbuild /p:Configuration=Release
cd bin\Release\
nuget push *.nupkg -Source http://192.168.1.209:1024/nuget iwehave2305!
git commit -a -m updateversion
如图 :

创建编译后事件,将修改记录推送到git服务器,也可以加失败邮件通知等等操作:

保存
立即构建测试一下,大功告成~
开发.NET Core NuGet包并实现CI/CD的更多相关文章
- GitLab CI/CD的官译【原】
CI / CD方法简介 软件开发的持续集成基于自动执行脚本,以最大限度地减少在开发应用程序时引入错误的可能性.从新代码的开发到部署,它们需要较少的人为干预甚至根本不需要干预. 它涉及在每次小迭代中不断 ...
- 《CI/CD 流程以及原理说明》
自动化部署 CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在 ...
- DevOps 什么是 CI/CD?
CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法.CI/CD 的核心概念是持续集成.持续交付和持续部署.作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时 ...
- 构建之法与CI/CD
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业2 我在这个课程的目标是 认识软工,拥抱软工,提升相关能力以便日后与其朝夕相伴 这个作业在哪个具 ...
- 使用批处理根据项目工程文件生成Nuget包并发布(支持.NET Core)
最近在使用之前自己编写的批处理给.NET Core项目打包时出问题了,发现之前的脚本根本不适用了,折腾了半天,总算解决了.因此在这里分享下经验,并且奉上整理好的脚本. Nuget包这里就不多介绍了,需 ...
- asp.net core 三 Nuget包管理
参考连接:http://www.cnblogs.com/netcore2/p/7412891.html 这里的说明,基本就是学习了别人的文章,自己做了个备份 asp.net c ...
- 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何
基于 Vue.js 之 iView UI 框架非工程化实践记要 像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...
- .NET Core中创建和使用NuGet包
在.NET Core的项目中,如果我们要在项目中引用其它DLL文件,不应该直接在项目引用中添加DLL文件(虽然在.NET Core项目中也可以这么做),建议是去直接下载DLL文件所属的NuGet包.这 ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 & 发布
一个技术汪的开源梦 —— 目录 微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 ...
随机推荐
- 跟着太白老师学python 10day 函数的动态参数 *args, **kwargs, 形参的位置顺序
1. *args 接收实参的位置参数, **kwargs接收实参的关键字参数 def func(*args, **kwargs): print(args, kwargs) func(1, 2, 3, ...
- Qt(自适应窗口)
关于窗口布局: 默认控件的大小为最小尺寸: 如果此时右键设置布局时,窗口大小会自动缩放对应大小,不利于调整. 建议窗口控件设置好最小尺寸,便于窗口布局时,控件不会变形,例如: 改变minimumsiz ...
- Innobackupex MySQL 全备、增备及恢复
简介: 在这之前都是通过 mysqldump 来备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台.版本都很容易. 凡事有利必有弊,逻辑备份在你数据库比较大时,备份.恢复数据所耗 ...
- HTTP 1.0 & 1.1
简介: HTTP ( HyperText Transfer Protocol ) 超文本传输协议,是互联网上应用最广泛的一种网络协议. HTTP 是一个客户端和服务端请求.应答的标准.使用 WEB 浏 ...
- Java服务器工程师任职资格
Java服务器端开发工程师 1.Java服务器端3年以上开发经验 2.至少一个完整游戏项目经验 3.熟练掌握OOA.OOD.OOP 4.掌握常见网游协议开发方法 5.对TCP/IP有深入了解 6.对消 ...
- opencv3.4 win10 visual studio2017 opencv_contrib 编译
found Intel IPP (ICV version): 2017.0.3 [2017.0.3] at: D:/opencv/opencv_3_4_0/opencv/my_build/3rdpar ...
- iOS端一次视频全屏需求的实现(转)
对于一个带有视频播放功能的app产品来说,视频全屏是一个基本且重要的需求.虽然这个需求看起来很简单,但是在实现上,我们前后迭代了三套技术方案.这篇文章将介绍这三种实现方案中的利弊和坑点,以及实现过程中 ...
- Python学习笔记_使用openpyxl操作Excel,在同一个文件里复制某一个sheet
应用场景:定制一个Excel模板文件,其中定义了一个模板Sheet,以此模板文件里的模板sheet为样例,制作报表,里面有不止一个模板样例Sheet 一.软件环境: 1.OS:Win10 64位 2. ...
- pkg-config的妙用
1.每个lib下都会有个pkg-config文件夹,里面有相应pc文件 修改里面内容可以改变pkg-config显示 2.将.pc文件所在路径添加到PKG_CONFIG_PATH中如: export ...
- c++ static笔记
[转]http://www.cnblogs.com/zi-xing/p/4590282.html static的作用 在函数体,一个被声明为static的变量,在这一函数被调用的过程里,其数值维持不变 ...