搞过CI/CD的同学一定吃过不少苦头,或者说遇到不少坑,但是对自动化的执着住挡不了前进的步伐,如果你缺少了运维这一块知识,那么你的流水线总是不那么完美,本文记录的是自己躺过的坑,希望对你有所帮助。

一、相关环境和版本

  • 服务器:windows2008【历史遗留服务器,建议升级到2012以上,2016支持Windows的容器化技术】
  • 源代码管理:git
  • .net core版本:net core 2.2

  这里最应该注意的是操作系统版本和Jenkins的版本,不同的版本,特别是操作系统操作的shell可能千差万别,你会在网上看到各种命令,所以选择好自己的环境。

安装Jenkins比较简单,这里略过……

二、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

参考文献:

四、Jenkins常用插件

  • Green Balls

该插件让你的感官有了更好的提升,客官请看:

非常棒的构建看板,把团队信息透明度提升一个档次,再也不用听到前端开发在问:“有人在构建吗?”,客官请看:

五、总结

  jenkins是如此强大,以至于今年来基本上一统CI、CD的江山,他的内容又是如此之多,足够写一本书,感叹所学只不过它的冰山一角。在pipeline项目中,它也支持python等其他脚本语言的流水化作业,功能非常之强大,期待后面的挖掘和丰富……

使用Jenkins部署.Net Core遇到的几个坑的更多相关文章

  1. jenkins部署net core初探

    一步一步,小心翼翼吖.看了好几个博客,摸索了两天了,才搭建成功,不容易,先写篇文章记下来,hhhhhhhhhhhh 相关环境配置 服务器:centos7 源代码管理器:git 技术选型:net cor ...

  2. Jenkins部署net core小记

    作为一个不熟悉linux命令的neter,在centos下玩Jenkins真的是一种折磨啊,但是痛并快乐着,最后还是把demo部署成功!写这篇文章是为了记录一下这次部署的流程,和心得体会. 网上很多资 ...

  3. 在IIS上部署 .Net Core 3.0 项目踩坑实录

    在IIS上部署 .Net Core 3.0 项目的主要流程有: 安装并启用IIS 安装AspNetCoreModuleV2 添加.配置网站 设置应用程序池 通过VS发布 一.安装并启用IIS: 安装了 ...

  4. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  5. .Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用

    安装docker版jenkins 因为jenkins的docker版本本身没有 dotnetcore的环境,所以我们需要先自己动手制作下包含dotnet环境的jenkins Docker Contai ...

  6. Jenkins 流水线远程部署 .NET Core/Framework 到 IIS

    目录 Windows 安装 Git WebDeploy Windows 从节点 .NET Core 处理 IIS 处理项目 Jenkinsfile .NET Framework 安装环境 .NET F ...

  7. 【k8s实战一】Jenkins 部署应用到 Kubernetes

    [k8s实战一]Jenkins 部署应用到 Kubernetes 01 本文主旨 目标是演示整个Jenkins从源码构建镜像到部署镜像到Kubernetes集群过程. 为了简化流程与容易重现文中效果, ...

  8. Jenkins部署配置简介

    前段时间研究了一下自动化测试,因而接触到了Jenkins,今天有时间进行一下Jenkins部署配置相关知识的总结分享 前言:由于本次只是实验性研究,采用Windows环境,因此Jenkins可以通过下 ...

  9. IIS上部署Net.Core

    部署: 1.安装vc_redist.x64vc_redist.x64 2.安装DotNetCore.1.0.0.RC2-WindowsHosting 3.安装DotNetCore.1.0.0-SDK. ...

随机推荐

  1. HDU 3360 National Treasures 奇偶匹配的最低点覆盖

    标题来源:pid=3360">HDU 3360 National Treasures 意甲冠军:假设a[i][j] != -1 把他转成二进制 最多有12位 代表题目那张图的12个位置 ...

  2. 不使用运算符(+、-、*、/) 来进行四则运算(C#)

    最近在LeetCode 上刷题,遇到一个非常有趣的题目,题目的大概意思就是在不使用运算符的情况下实现两个数的加法...原题点这里>>> 说实话,刚看到这题目,我是一脸懵逼的. 后来仔 ...

  3. ShopNC本地生活o2o网站的源代码,没有域名限制

    较前某VIP源代码论坛分享了套ShopNC本地生活o2o站点系统.下载过来却发现根本不能用,所以一直没分享出来.今天咱们这边分享的这套ShopNC本地生活o2o站点源代码,无不论什么的限制,直接ins ...

  4. Matlab Tricks(二十三)—— 保存图像到 pdf

    printme = @(txt) print('-dpdf', sprintf('figures/Example_%s',txt)); % 该匿名函数的接受的参数为字符串类型,也即欲保存的文件名: % ...

  5. DWZ使用注意事项

    DWZ使用注意事项 一.前言     在最近的一个项目,介绍DWZ丰富client框架,可以尝试一下.另外,在遇到的很多问题.十一终于攻克. 特别说明本文的.     本人用的是dwz-ria-1.4 ...

  6. [转]完美解决)Tomcat启动提示At least one JAR was scanned for TLDs yet contained no TLDs

    一.文章前言    本文是亲测有效解决At least one JAR was scanned for TLDs yet contained no TLDs问题,绝对不是为了积分随便粘贴复制然后压根都 ...

  7. postgresql 自带函数

    替换函数 SELECT replace('abcdefabcdef', 'cd', 'XX') 得到 abXXefabXXef ------------------------------------ ...

  8. nuget包发布

    创建项目 需要选择.net Standard的项目   0 设置包信息   1 打包   2 在bin目录下可以看到生成的.nupkg文件   3 发布包 登录https://www.nuget.or ...

  9. WPF 4 单词拼写检查(SpellCheck)

    原文:WPF 4 单词拼写检查(SpellCheck)      在WPF中 Textbox 和RichTextBox 控件都内置了拼写检查属性,但该属性目前默认仅支持English.Spanish. ...

  10. mysql三种修改密码的方式

    [root@MySQL ~]# mysqladmin -uroot -proot -S /data/3307/mysql.sock password '123'; 其中-p是现在的密码,passwor ...