asp.Net core+Jenkins+Git实现windows上CI/CD自动构建发布等

-- asp.Net core web程序在Windows上使用Jenkins实现持续集成,自动发布等(CI,CD,自动监控git仓库变更,自动构建,发布)
【官网】:https://www.jenkins.io

应用场景

每次发布web站点时,手动发布所做的事情主要是备份,生成,发布。而手动做这些循环的事情,不但增加工作量还容易出错。尤其当产品持续迭代的时候,无限重复的步骤就会让人很烦躁并极易出错,大大增加人力和时间成本。Jenkins可以让我们解放双手,去做更有价值的事情。

基础资源

jdk-8u261-windows-i586.exe,nuget.exe CLI,MsBuild,Jenkins,git(可选),OpenSSH服务端(可选),.net core sdk3.1,ASP.NET Core 3.1 Runtime (v3.1.5) - Windows Hosting Bundle Installer

使用须知

目标:让 asp.Net core web程序在Windows上使用Jenkins实现持续集成,自动发布等(CI,CD,自动监控git仓库变更,自动构建,发布) 注意项:1)强烈建议对项目类库的依赖,抛弃以前本地依赖的方式,统一使用Nuget . 2)首先我们要把Asp.Netcore发布成基于windows服务的发布方式. 3)每次发布之前先备份(每次发布前备份(把正在运行的文件拷贝到备份文件夹内,然后再开始发布新的版本).

配置步骤

[步骤1:下载适合你的平台版本]

下载地址:  https://www.jenkins.io/zh/download/

               选择window版本

[步骤2:安装]

直接双击jenkins.msi文件,采用默认设置或自定义安装目录,直到完成。

[步骤3:配置下载镜像]

本步骤是可选项,我本机网络正常,因此没有配置镜像。大家根据情况而定。


安装过程如果发现安装目录发现有hudson.model.UpdateCenter.xml文件。

这个时候到windows服务列表中,停止Jenkins服务。

然后打开hudson.model.UpdateCenter.xml文件。

修改镜像:<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>

重新启动Jenkins服务。

打开http://localhost:8080,稍等会跳转到http://localhost:8080/login?from=%2F页面。

注意:期间会不断的去请求这个地址,不用管。据说是因为jenkins的后台访问了国外的地址,但访问不了导致的。

[步骤4:解锁Jenkins]


[步骤5:安装Jenkins插件]

选择自定义Jenkins,如果选择推荐插件,不仅要等很久,而且会有很多装不上。


注: 选择"无",一个插件都不装。

[步骤6:创建管理员]

[步骤7:实例配置]

[步骤8.1:汉化配置]

本步骤是可选项.

点击左侧菜单Manage Jenkins,然后点击右侧Manage Plugins

进去之后,选择Available

我们输入并搜索:Localization: Chinese (Simplified)

如图:


安装成功后如图:


[步骤8.2:重启让汉化生效]

安装完之后,地址栏输入:http://localhost:8080/restart 重新启动。重启成功后看到的就是汉化之后的界面了。

如果安装失败,可访问:https://plugins.jenkins.io/,同样搜索"Localization: Chinese (Simplified)" 单独下载。


选择最新的就行了。

下载下来后,是个localization-zh-cn.hpi文件。

点击主页的Manage Plugins,进去后选择Advance选项卡。将下载的文件上传上去即可,如下图:





[步骤9.1:安装git插件]

注:如果是svn请自行参考前面汉化步骤适当修改搜索关键词,大体步骤一样。



[步骤9.2:配置git]

 1)首先,我们的项目需要已经借助git仓库管理,github,gitlab,gitee (考虑网络和易用性原因,我选择了gitee). 

 2)需要在本地通过git gui工具生成rsa 公钥私钥对,将公钥填写到git的web管理后台.  同时需要记住产生rsa密钥对时的密码。

 3)设置好项目对各个账号的权限,作为开发者还需要确保仓库的权限是公开的还是私有的,避免出现重大安全隐患。

[步骤10:全局配置]


如果Path to Git executable配置为git.exe不行的话,填写安装路径也是可以的。

我的是:C:\Program Files\Git\bin\git.exe


[步骤11:保存]

接下来可以开始创建构建发布任务了,具体请看本文后半部分的快速入门

常见问题

  • 8080端口已被其它应用占用,无法使用
    【解决方案】可以把占用8080端口的应用停掉;或者修改jenkins安装目录下jenkins.xml文件,将8080换为其它可用端口

快速入门

注: 一个公司或团队,可能有多个项目,因此每个项目可以创建不一样的jenkin任务,采用不同的配置和策略。

[步骤1.1:创建任务]

在主面板(dashboard),点击[New Item],并选择  [Freestyle project]

[步骤1.2:源码仓库(git)管理]

根据提示和自己的需求,填写.

[步骤1.3:构建触发器管理]

勾选:Poll SCM,时间设置成:H/2 * * * *

意思是每2分钟检查git是否有变化,如果有变化就会重新构建和部署。



[步骤1.4:构建(build)与发布(publish)脚本编写]

我们以最简单的发布过程为例,脚本大概如下(先停止站点,构建,发布,恢复站点),脚本大概如下:

F:
cd F:\F\CLBWork\CICD\CICDDemo\cicdtest
dotnet build


C:\\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:CICDTest
dotnet publish -o F:\ftp\webroot\CICDTest
C:\\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:CICDTest



[注1]脚本开发中,脚本步骤顺序,要考虑对线上站点影响最小(比如:构建过程中不需要停止站点,等发布时才需要)。

[注2]还需要考虑步骤失败了是否能恢复,是否需要报警通知运维负责人。

[注3]通常使用cmd还需要确保jenkins服务具备本地操作的权限,以及相关的磁盘目录需要填写你自己的。


[步骤1.5:触发运行]

[注]由于我们上面设置触发器策略是定时检查git仓库是否有变更,因此我们只需在项目中随便修改什么东西,提交远程仓库,即可在等一会看到jenkins自动构建发布的效果。

[步骤1.6:验证查看jenkins自动监控触发,构建,发布的站点]


[步骤1.7:如果失败还可以看下jenkins任务输出日志]




参考资料