前言:
最近在做NetCore项目,因为项目是部署在WinServer的IIS上(别问我为啥不用Linux),而更新的办法是采用mstsc(远程桌面)后手动复制覆盖dll文件。
而作为一个只会CRUD的菜鸟本鸟,在每次修改完代码提交SVN以后,都得知会专人等待发布更新,相当痛苦。
由于是项目开发初期,代码的版本迭代很频繁,不及时更新造成的结果就是与前端的对接也相应延后,项目进度拖延是肯定的,这好吗?这不好!
由此可见部署一套可行的版本管理、CI/CD方案是多么重要。
下面本人将展示,自己安装配置这一套的全过程(多图警告!)利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程

1. 准备工具:

2. 搭建SVN Server服务并建立svn仓库

  • 下载上面的安装包以后,我们就开始安装SVNServer了,一路下一步就ok了,这里我指定端口为4437
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 安装完了SVN服务,我们就要建立一个用于管理代码版本的SVN仓库了
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 这里建一个名为Net5Repo的仓库
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 并建一个具有读写权利的用户admin
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 建完了仓库,我们再把SVN连接工具安装上(也是一路下一步,这里不多赘述)。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 然后找个文件夹CheckOut下来。因为我们是搭的本地SVN服务,路径就是https://localhost:4437/svn/ {仓库名},这里{仓库名}就是上面我们建的Net5Repo
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 点击OK后会验证账户密码,输入正确以后就能把仓库拉取下来了。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程

3. 新建Net5.0项目,并传至svn仓库


  • 打开VS2019新建Net5.0项目,
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 这里我们就建一个名为NetApi的Web项目
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 注意选择NetCore版本
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 这里用运行win+r打开cmdcd到项目根目录,然后启动项目。

cd C:\WorkSpace\SVN\Net5Repo\NetApi
dotnet run

利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程

  • 因为net 5.0集成了swagger,因此我们可以直接访问Api地址: https://localhost:5001/swagger/index.html
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • swagger可以代替接口文档对接前端,实际开发中只要把这个地址丢过去就行了,简直不要太完美。利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 提交我们项目的第一版到SVN仓库
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 但是可以看到 提交的文件非常多,乱七八糟,有些是vs编译产生的临时文件,例如/bin/obj*.csproj.user(vs用户的本地配置文件),我们肯定是不能维护进版本库的,因此添加规则,忽略之。
  • 首先右键我们的项目文件夹NetApi,依次选择TortoiesSVN->Properties,点击New...,选择Other,属性名选择svn:global-ignores,然后敲入binobj,点击ok。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 然后对NetApi文件夹下的bin以及obj文件夹标记为删除,最后提交。这样一来编译产生的文件就不会出现在提交列表里,非常的干净清爽。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程

4. 安装并配置jenkins

  • 首先安装Jenkins
  • 这里把端口指定为8888
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 然后按提示步骤一步步下去。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 这里要注意选择安装推荐的插件,可以省不少事。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 安装完插件重启后,会让你创建管理员,这里我们创建一个admin账户。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 然后登录jenkins
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 安装Subversion插件,依次点击Manage Jenkins->Manage Plugins,搜索Subversion勾选安装并重启。
  • 接下来就开始配置任务了,我们在首页点击新建Item,任务名就叫NetApi,选择FreeStyle Project (yeah~ freestyle!)利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  1. 我们在源码管理里选择Subversion(SVN)
  1. 构建触发器里定义条件,选择Poll SCM(具体规则可以点击右侧的利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程查看),这里我们设定5分钟检测一次 H/5 * * * *
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  2. 我们先保存后点击Build Now构建一次看看效果。可以看到东西都被下载到了工作区。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  3. 这里我们以Jenkins构建后的工作区(workspace)为主,编译发布NetCore项目,然后建立成服务。
  • 我们打开cmdcd到工作区里,一般文件路径为:主目录路径(可在首页点击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
  • 可以看到编译后的文件都被发布到了我们指定的目录下,
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 接着我们以管理员方式打开cmd,输入以下指令,建立服务。服务名为NetApibindPath需要绝对路径指定到具体的*.exe文件,端口我们设置为8800,启动方式为auto(自动),然后敲入启动指令,却发现失败了。
    sc create NetApi binPath= "C:\WorkSpace\PublishSite\NetApi\NetApi.exe --urls=\"http://127.0.0.1:8800\"" DisplayName= "net接口" start= auto
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 查阅文档是缺少了引用包,Microsoft.Extensions.Hosting.WindowsServicesMicrosoft.AspNetCore.Hosting.WindowsServices,并修改Program.csIHostBuilder方法。我们照做之,代码如下。
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>();
                });
    }
}
  • 然而此处有一个坑,因为发布后的版本采用的环境是Production,新建项目默认只在Development开启Swagger,因此我们需要修改Startup.csConfigure方法。
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自动构建了本次提交。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 重复上述cdjenkins工作区,然后发布dotnet publish -o 的工作,我们成功注册了NetApi的服务,并启动之。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 然后打开浏览器访问 http://localhost:8800/swagger/index.html 可以看到服务起来了。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 打开任务管理器也能看到
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 如此一来我们也就清楚了,该如何利用cmd的命令行来编译、发布并部署Net5.0项目,继续配置jenkins
  1. 构建里我们选择Execute Windows batch command。并贴入如下代码并保存。
sc stop NetApi
dotnet publish -o C:\WorkSpace\PublishSite\NetApi
sc start NetApi
  • 点击Build Now,检查下是否构建成功。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 可以看到一切顺利,服务也成功跑起来了。

好了到此,我们就算是把这一套CI/CD给安装配置完毕了,写个简单接口测试下

  • 新建控制器 UserController.cs,添加Login的Get方法,返回success字符串。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 然后提交svn。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 直接打开swagger页面,刷新下,自动发布更新了。。利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程
  • 看下jenkins自动构建了。
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD教程

完毕。

标签: 仓库, svn, Jenkins, SVN, NetCore, CI, 我们, NetApi

相关文章推荐

添加新评论,含*的栏目为必填