前言:
最近在做NetCore项目,因为项目是部署在WinServer的IIS上(别问我为啥不用Linux),而更新的办法是采用mstsc
(远程桌面)后手动复制覆盖dll文件。
而作为一个只会CRUD的菜鸟本鸟,在每次修改完代码提交SVN以后,都得知会专人等待发布更新,相当痛苦。
由于是项目开发初期,代码的版本迭代很频繁,不及时更新造成的结果就是与前端的对接也相应延后,项目进度拖延是肯定的,这好吗?这不好!
由此可见部署一套可行的版本管理、CI/CD方案是多么重要。
下面本人将展示,自己安装配置这一套的全过程(多图警告!)
1. 准备工具:
- Jdk 8(用于支撑Jenkins运行)
- Jenkins(CI/CD主要工具)
- SVN Server (搭建本地svn服务)
- TortoiseSVN (连接svn仓库的工具)
- NetCore 5.0 SDK(net5开发运行环境)
2. 搭建SVN Server服务并建立svn仓库
-
下载上面的安装包以后,我们就开始安装SVNServer了,一路下一步就ok了,这里我指定端口为4437。
-
这里建一个名为Net5Repo的仓库
-
建完了仓库,我们再把SVN连接工具安装上(也是一路下一步,这里不多赘述)。
-
然后找个文件夹CheckOut下来。因为我们是搭的本地SVN服务,路径就是https://localhost:4437/svn/ {仓库名},这里{仓库名}就是上面我们建的Net5Repo,
-
点击OK后会验证账户密码,输入正确以后就能把仓库拉取下来了。
3. 新建Net5.0项目,并传至svn仓库
-
打开VS2019新建Net5.0项目,
-
这里我们就建一个名为NetApi的Web项目
-
注意选择NetCore版本
-
这里用运行
win+r
打开cmd
,cd
到项目根目录,然后启动项目。
cd C:\WorkSpace\SVN\Net5Repo\NetApi
dotnet run
-
因为
net 5.0
集成了swagger
,因此我们可以直接访问Api地址: https://localhost:5001/swagger/index.html
-
swagger可以代替接口文档对接前端,实际开发中只要把这个地址丢过去就行了,简直不要太完美。
-
提交我们项目的第一版到SVN仓库
-
但是可以看到 提交的文件非常多,乱七八糟,有些是vs编译产生的临时文件,例如
/bin
、/obj
、*.csproj.user
(vs用户的本地配置文件),我们肯定是不能维护进版本库的,因此添加规则,忽略之。
4. 安装并配置jenkins
-
首先安装Jenkins
-
然后登录jenkins
-
安装
Subversion
插件,依次点击Manage Jenkins
->Manage Plugins
,搜索Subversion
勾选安装并重启。 -
接下来就开始配置任务了,我们在首页点击
新建Item
,任务名就叫NetApi
,选择FreeStyle Project
(yeah~ freestyle!)
-
我们在源码管理里选择
Subversion
(SVN)-
Repository URL
里输入我们前面建的本地svn仓库地址(https://localhost:4437/svn/Net5Repo/NetApi )
-
查看),这里我们设定5分钟检测一次构建触发器
里定义条件,选择Poll SCM
(具体规则可以点击右侧的H/5 * * * *
-
这里我们以Jenkins构建后的工作区(workspace)为主,编译发布
NetCore
项目,然后建立成服务。-
我们打开
cmd
,cd
到工作区里,一般文件路径为:主目录路径(可在首页点击Manage Jenkins
->Configure System
中查看)\workspace\任务名(这里我们是NetApi)
cd C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\NetApi
-
然后发布到指定文件夹(微软dotnet CLI指令文档),这里指定为 C:\WorkSpace\PublishSite\NetApi
dotnet publish -o C:\WorkSpace\PublishSite\NetApi
-
可以看到编译后的文件都被发布到了我们指定的目录下,
-
接着我们以管理员方式打开cmd,输入以下指令,建立服务。服务名为
NetApi
,bindpath
需要绝对路径指定到具体的*.exe
文件,端口我们设置为8800
,启动方式为auto
(自动),然后敲入启动指令,却发现失败了。
sc create NetApi binPath= "C:\WorkSpace\PublishSite\NetApi\NetApi.exe --urls=\"http://127.0.0.1:8800\"" displayName= "net接口" start= auto
-
查阅文档是缺少了引用包,Microsoft.Extensions.Hosting.WindowsServices 与Microsoft.AspNetCore.Hosting.WindowsServices,并修改
Program.cs
的IHostBuilder
方法。我们照做之,代码如下。
namespace NetApi { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService()//添加此行 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); } }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "NetApi v1")); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
-
然后我们提交
svn
,可以看到jenkins
自动构建了本次提交。
-
重复上述
cd
到jenkins
工作区,然后发布dotnet publish -o
的工作,我们成功注册了NetApi的服务,并启动之。
-
然后打开浏览器访问 http://localhost:8800/swagger/index.html 可以看到服务起来了。
-
打开任务管理器也能看到
-
如此一来我们也就清楚了,该如何利用
cmd
的命令行来编译、发布并部署Net5.0
项目,继续配置jenkins
-
-
在
构建
里我们选择Execute Windows batch command
。并贴入如下代码并保存。sc stop NetApi dotnet publish -o C:\WorkSpace\PublishSite\NetApi sc start NetApi
-
点击
Build Now
,检查下是否构建成功。
-
可以看到一切顺利,服务也成功跑起来了。
-
好了到此,我们就算是把这一套CI/CD给安装配置完毕了,写个简单接口测试下
-
然后提交svn。
-
-
看下jenkins自动构建了。
完毕。
原文地址:https://www.cnblogs.com/qinko/p/14142805.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。