搞过 CI/CD 的同学一定吃过不少苦头, 或者说遇到不少坑, 但是对自动化的执着住挡不了前进的步伐, 如果你缺少了运维这一块知识, 那么你的流水线总是不那么完美, 本文记录的是自己躺过的坑, 希望对你有所帮助.
一, 相关环境和版本
服务器: windows2008[历史遗留服务器, 建议升级到 2012 以上, 2016 支持 Windows 的容器化技术]
源代码管理: Git
.net core 版本: net core 2.2
这里最应该注意的是操作系统版本和 Jenkins 的版本, 不同的版本, 特别是操作系统操作的 shell 可能千差万别, 你会在网上看到各种命令, 所以选择好自己的环境.
安装 Jenkins https://jenkins.io/zh/ 比较简单, 这里略过......
二, Jenkins 相关配置
Step1. 创建一个自由风格的 Jenkins 项目, 这一步比较简单略过 (pipeline 项目是一项更加挑战, 也许运维高手更需要熟悉, 这里跳过)
Step2. 在配置 Git 源码路径的时候报错:
解决方法:
1. 安装 Git client 插件, 并重启 jenkins
2. 确保安装 jenkins 的服务器同时也安装了 Git, 并在 jenkins 上配置 Git 的路径, 如下图:
3. 成功配置 Git 源码路径
Step3. 构建时候报错:
从中可以判断, 我的邮件还没有配置, 所以发送报错......
Step4. 进行邮件的配置
Jenkins 内置邮箱功能:
1. 首先配置 Jenkins Location
所在路径: Manage Jenkins=》Configure System=>Jenkins Location
2. 配置 E-mail Notification 如下图所示
3. 测试发送成功
Email 插件: Email Extension
插件安装后如下图所示:
step5. 构建的坑 [该坑最耗时间, 最后发现却是最简单]
1. 请指定项目或解决方案文件. 当前工作目录中未包含项目或解决方案文件.
排查: 切换到服务器 cmd 下进行 restore 后发现, 原来是 nuget 作怪, 因为服务器无法找到部署在本地服务器的 nuget 包
2. 发布 Nuget 包到官网
试着解决: 试着把 nuget 包发布到官网. 具体如何发布请跳转
新版本的发布需要增加 License.txt, 否则无法通过, 配置如下: 其中 Licese 是从 GitHub 上拷贝过来的. 如果你发布后发现代码没有生效, 请确认你是否在 release 下进行编译, 并且 build 过?
解决方法: 如下图所示, 极其简单, 折腾的半天, 晕! 你甚至 dotnet restore 和 dotnet build 都不用写, 因为 dotnet publish 本身包含 restore 和 build
Step6. 卡住在 using GIT_ASKPASS to set credentials 的坑
Unable to delete 'D:\Program Files (x86)\Jenkins\workspace\Stone.Base.API'. Tried 3 times (of a maximum of 3) waiting 0.1 秒 between attempts.
解决方法: 关闭配置里的删除功能
6. 构建的时候卡住在 using GIT_ASKPASS to set credentials
解决方法:
Step 1: 開始 -> 命令提示字元 -> 滑鼠右鍵 -> 以系統管理員身分執行
Step 2: 找出 Jenkins Server 的 Git 布置位置, 可以從自己的 Jenkins 錯誤中知道位置在哪裡, 以下是第一張圖顯示的 Git
Step3: 將命令提示字元 (管理者權限) 移動到該位置, 輸入 cd C:\Program Files\Git\bin 移動到該目錄
Step 4: 輸入 Git config --system --unset credential.helper , 按下 Enter
Step 5: 再重新建置 Jenkins Job 就可以正常運行了
Step7. 无法复制的坑
现象: 无法将 "obj\Debug\netcoreapp2.2\Stone.Base.API.dll" 复制到 "E:\Jacky\webAPI\Base.API\Stone.Base.API.dll"
原因: 该站点正在运行, dll 被占用, 无法进行替换覆盖
解决方法:
目前暂时还没有找到方法, 后面再做补充......
Step8. 无法删除的坑
原因: 该站点正在运行, 无法进行替换覆盖
解决方法: 把 Delete workspace before build starts 选项勾去掉, 如下图:
三, 全自动发布自家类库到 Nuget 官网或自家服务器
这里的发布改进了以往的手工发布. 从代码上传那一刻开始, jenkins 自动到 Git 抓取代码, 自动编译打包, 然后上传到 nuget 服务器.
jenkins 配置如下: 这里有很多坑, 特别是 Linux 和 Windows 很不一样, 同学们要留意. 配置其实不麻烦, 所有的 jenkins 编译都可以在系统内部自行跑一遍, 如果系统能跑通, jenkins 绝对没有问题. 具体配置如下图所示:
- dotnet build "D:\Program Files (x86)\Jenkins\workspace\Stone.Util\UtilLib\Stone.Util" -c Release
- md publish\nuget
- md publish\archives
- dotnet pack "D:\Program Files (x86)\Jenkins\workspace\Stone.Util\UtilLib\Stone.Util" -c Release -o publish\nuget
dotnet nuget push "D:\Program Files (x86)\Jenkins\workspace\Stone.Util\UtilLib\Stone.Util\publish\nuget\*.nupkg" -k {自己 key} -s https://api.nuget.org/v3/index.json
move "D:\Program Files (x86)\Jenkins\workspace\Stone.Util\UtilLib\Stone.Util\publish\nuget\*" "D:\Program Files (x86)\Jenkins\workspace\Stone.Util\UtilLib\Stone.Util\publish\archiv
参考文献:
.NET Core 从 GitHub 到 Nuget 持续集成, 部署
四, Jenkins 常用插件
Green Balls
该插件让你的感官有了更好的提升, 客官请看:
Build Monitor View
非常棒的构建看板, 把团队信息透明度提升一个档次, 再也不用听到前端开发在问:"有人在构建吗?", 客官请看:
五, 总结
jenkins 是如此强大, 以至于今年来基本上一统 CI,CD 的江山, 他的内容又是如此之多, 足够写一本书, 感叹所学只不过它的冰山一角. 在 pipeline 项目中, 它也支持 python 等其他脚本语言的流水化作业, 功能非常之强大, 期待后面的挖掘和丰富......
来源: https://www.cnblogs.com/jackyfei/p/11146353.html