.Net在Windows上使用Jenkins做CI/CD
背景最近入职了一家新公司 , 公司各个方面都让我非常的满意 , 我也怀着紧张与兴奋的心情入职后 , 在第一天接到了领导给我的第一个任务——把整个项目的依赖引用重新整理并实施项目的CI/CD 。
本篇的重点主要分享这次在windows平台使用Jenkins做.Net Framework的自动化 , 真是所谓一波N折 。
有关注过我的博客的朋友们 , 应该知道我之前都是在linux上实施.Net Core , 好不容易把Linux技能点起来 , 现在玩回Windows+.Net Framework感觉有一种回到钻木取火的年代 。
在实施过程中让我感悟最多的是 , dotnet core命令的便捷性 , Linux运维的便捷性 , 下文我有很多构建脚本都是shell脚本来的 , 当时想着学习一次就不需要学习bat脚本了 , 最终还是躲不过 。
在远程传送并远程执行命令我折腾得最久 , 开始想着用FTP与Telnet , 谁知道Telnet命令没有附带账号密码参数 , 脚本不好写 , 后改成PsExec.exe , 使用过程中很多奇怪的问题 , 后来不得不去折腾OpenSSH , 说实话还是SSH好用 , 直接代替了FTP与PsExec 。中间还遇到Jenkins使用本机账号执行的权限问题 。所有“坑”的我在下面步骤尽可能给大家规避了 。
引用整理

文章插图
项目(包含所以依赖的项目)依赖引用丢失 , 主要体现以下几点:
- 官方依赖包没有使用NuGet
- 内部项目引用通过本地引用 , 项目没有拉取则编译失败
- NuGet包多个版本的引用
- 同属一个解决方案 , 但是项目分散到各个仓库
- 缺少代码或者代码路径不一致则无法正常编译通过
- 对于新人同事不友好
- 实现CI/CD会有很大的阻力
- 整理组件库到统一解决方案 , 日后有需要拆分再按需拆分 , 优先保证需要依赖的在一个方案 。
- 实现组件库的自动发布到私有Nuget
- 整理API项目的依赖 , 抛弃以前本地依赖的方式 , 统一使用Nuget
- 实现API项目的自动发布到IIS
https://www.jenkins.io/zh/download/ githttps://git-scm.com/download/win OpenSSH服务端https://github.com/PowerShell/Win32-OpenSSH/releases 远程传输与远程执行命令
物理部署图

文章插图
文章会分享跨网络环境的场景 , 我们使用了Gitee的企业仓储 , Jenkins与Nuget.Server会放在阿里云服务器 , 机房会开放一台服务器与阿里云服务器进行SSH的通信 。
以上是基本的信息概要 , 下面会进入具体的实施步骤 。
NuGet.Server的部署新建一个ASP.Net Web应用程序(.NetFramework),并选择空模板 , 搜索NuGet.Server选择3.4.1版本安装后 , 打开Web.config文件设置apiKey , 然后就可以部署到47.115.111.58的IIS了 。
官方部署文档可以查看 https://docs.microsoft.com/zh-cn/nuget/hosting-packages/nuget-server

文章插图

文章插图
安装MsBuild在服务器47.115.111.58打开通过上面表格的链接下载VS的安装包 , 点开单个组件选项卡 , 勾选Msbuild , 等待一会即可完成 。

文章插图
配置nuget.exe CLI在服务器47.115.111.58根据上面表格nuget.exe CLI , 下载后放到一个合适的文件目录 , 并在【环境变量配置】配置好路径 , 打开cmd并输入指令nuget help出现以下画面证明成功 。

文章插图
推荐阅读
- 丝绸之路是在哪个时期开通的 丝绸之路最早是由谁开通的
- YARN 在字节跳动的优化与实践
- 数据库:innodb数据组织形式
- 教你在几分钟内构建一个Python包
- 荀彧帮曹操后又反对曹操当魏王 荀彧在曹操中的地位
- 喝茶拉肚子是在排毒吗,五种养生茶是首选
- 在Linux中使用Bashtop与Bpytop监管系统资源
- 清平乐村居表达了诗人什么之情 清平乐村居词人在词中勾勒了一幅怎样的画面
- 手机游戏|在这一刻 我变成了光!《奥特曼》手游定档4月29日
- 吴用和谁在宋江坟前上吊 最后在宋江墓前自缢身亡的是