1 原因和目的

相信很多开发者都需要将自己的编写的应用进行编译并部署到服务器上,这个过程在个人或小型团队的项目中都是一个简单的事情。但是对于并行化开发而言,就需要通过工具来辅助这个过程。于是,我参考了一下DevOps技术中的CI/CD。工作环境主要是Windows Server,而且目前环境没有Docker,我就考虑直接部署在中间件上,并通过OpenSSHWinRM实现远程命令控制。

2 工作原理

通过Git实现软件版本控制,再通过Jenkins负责CI的操作,通过Syncthing实现文件同步传输。

2.1 图解

  1. PC 1

    • 作为开发者的客户端,编写代码
    • 通过Git client提交代码,并Git push至CentOS服务器
  2. CentOS 7

    • 作为Git Repository
    • 部署Jenkins,持续集成Git Repository的代码
    • 通过Syncthing同步发布编译的代码至WindowsServer服务器
  3. Windows Server 2012 R2

    • 部署Jenkins,持续集成Git Repository的代码
    • 通过Syncthing同步发布编译的代码至CentOS服务器

2.2 主要演示

  1. 实现对Windows Server远程控制,自动化部署IIS服务。
  2. 实现对Linux远程控制,自动化部署Nginx服务。

3 部署服务

3.1 模拟环境

我的环境是i7(6C12T),内存 16G的windows 10,通过VMware Workstation 15虚拟环境:

  • 一台Windows 10(1C2T,2G)
  • 一台CentOS 7(2C2T, 8G)
  • 一台Windows Server 2012 R2(2C2T, 8G)

3.2 安装软件

  1. PC 1,软件如下:

    • 安装.net core 3.1 sdk
    • 安装Visual Studio 2019
    • 安装最新版Git
  2. CentOS 7, 软件如下:

    • 按照官网的步骤安装.net core 3.1 sdk
    • 安装OpenJDK 11及以上版本
    • 安装Tomcat 9及以上版本
    • 在Jenkins官网下载war包,复制到Tomcat的webapps目录下,并按照提示操作。
    • 通过rpm -e卸载低版本的git,并安装新版的Git
    • 下载并安装Syncthing,官方提供了GTK客户端或无GUI版(CLI及Web版本),我安装的是后者syncthing-linux-amd64-v1.16.1.tar.gz文件(替代方案是FTP服务或其他文件同步工具,读者可以自行研究)
  3. Windows Server 2012,软件如下:

    • 安装Chrome浏览器,原因是IE的安全等级默认最高,不利于网页浏览。
    • 安装.net core 3.1 sdk
    • 安装OpenJDK 11及以上版本
    • 安装Tomcat 9及以上版本
    • 在Jenkins官网下载war包,操作同CentOS。
    • 安装最新版Git
    • 下载并安装Syncthing,官方提供了GTK客户端或无GUI版(CLI及Web版本),我安装的是后者syncthing-windows-amd64-v1.16.1.zip(替代方案是FTP服务或其他文件同步工具,读者可以自行研究)
    • 下载安装windows版的Openssh

3.3 模拟试验

3.3.1 实现对Windows Server远程控制,自动化部署IIS服务。
  1. 在CentOS中创建Git Repository,而在PC 1客户端下运行Git Bash,输入git clone命令克隆Git远程库。参考文档
  2. 在PC 1的客户端中,通过VS2019提供的.net core MVC Web模板,生成代码,并运行。
  3. git初学者建议使用gitignore来过滤需要提交的文件,避免将运行编译文件提交造成版本冲突,可以登陆此网站查找对应工具的.gitignore文件格式。
  4. 运行Git Bash, 依次运行git add,git commitgit push
  5. 通过浏览器访问CentOS下Jenkins,创建自由项目,配置Git数据源信息。参考文档
  6. Jenkins中安装.net sdk插件,用于自动运行dotnet编译发布命令。
  7. 在CentOS服务器中,运行syncthing解压目录下的syncting执行文件 参考文档

    tomcat@syncthing$ ./syncthing

  8. 在Windows server服务器中,运行syncthing解压目录下的syncting执行文件,双击exe即可
  9. 配置CentOS下/用户空间/.jenkins/workspace/自由项目名目录与Windows Server的本地某个目录同步,并配置IIS服务指向Windows下该目录\bin\Release\netcoreapp3.1\publish目录
  10. python + winrm 实现远程连接Windows服务器,并执行指定命令,在CentOS端Jenkins执行bash,通过Python访问windows server的winrm,发送对IIS的启动/停止命令
3.3.2 实现对Linux远程控制,自动化部署Nginx服务。

参考微软官方的原理图,可以发现Nginx的作用是反向代理,主要还是依赖dotnet自带的Kestrel。IIS不愧是微软亲生的。

  1. 通过浏览器访问CentOS下Jenkins,创建自由项目,配置Git数据源信息。这里直接使用CentOS下的Git Repository 参考文档
  2. Jenkins中安装.net sdk插件,用于自动运行dotnet编译发布命令。
  3. 如3.3.1配置类似,将windows下C:\Users\用户空间\.jenkins\workspace\自由项目名目录与CentOS的本地某个目录同步
  4. 参考官网通过systemd配置的dotnetcore web的daemon进程,这样可以像IIS一样通过命令systemctl start 服务名systemctl stop 服务名控制daemon的启动和停止。Nginx的反向代理官网有所提及,此处不再追述。
  5. 在Jenkins上安装Powershell插件,方便使用windows cmd。通过openssh发送上一步骤的bash命令,控制CentOS上的HTTP.sys服务。
注意:
  • 由于C#是一个编译型语言,对dll存在文件读写锁,必须通过停止服务来关闭。
  • 本文未涉及计算机安全的内容,请读者结合自身项目的实际环境,对身份验证和数据加密进行深入研究。
  • 服务器自带防火墙,所以对于端口都需要结合需要进行配置,方便网络共享。

4 总结

自动化部署的方式有很多种。DevOps工程师一般都采纳虚拟化容器的方式打包服务,并通过Kubernetes进行分布式分发,为开发者提供良好的生产环境和管理运维环境。Jenkins软件的功能很强大,但是我这里只用了几个简单的功能。建议有兴趣的读者,继续深入探索Jenkins的全部奥秘。虽然微软的Powershell支持Linux,但是我比较习惯bash语法和Python语言。读者也可以结合自身擅长使用Node.js或Go等其他开发语言来制作脚本或工具。

自动发布.NET Core Web应用的更多相关文章

  1. 手把手教你用Jenkins自动发布dotnet core程序

    Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安装教程略.... 嗯?不是说好手把手么 ...

  2. Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker

    准备工作(安装过程可以百度,已安装的可以跳过) a)     安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...

  3. 发布.net core Web到CentOS7

    1.发布一个.net core(只安装了.Net Core运行时,而没有安装ASP.NET Core运行时,需要添加以下节点再发布).  <PublishWithAspNetCoreTarget ...

  4. Gitlab CI 自动部署 asp.net core web api 到Docker容器

    为什么要写这个? 在一个系统长大的过程中会经历不断重构升级来满足商业的需求,而一个严谨的商业系统需要高效.稳定.可扩展,有时候还不得不考虑成本的问题.我希望能找到比较完整的开源解决方案来解决持续集成. ...

  5. 详解Net Core Web Api项目与在NginX下发布

    前言 本文将介绍Net Core的一些基础知识和如何NginX下发布Net Core的WebApi项目. 测试环境 操作系统:windows 10 开发工具:visual studio 2019 框架 ...

  6. 循序渐进学.Net Core Web Api开发系列【7】:项目发布到CentOS7

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...

  7. List多个字段标识过滤 IIS发布.net core mvc web站点 ASP.NET Core 实战:构建带有版本控制的 API 接口 ASP.NET Core 实战:使用 ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目 Using AutoFac

    List多个字段标识过滤 class Program{  public static void Main(string[] args) { List<T> list = new List& ...

  8. 通过VS2017发布.net core程序并使用Web 部署到远程服务器最新教程

    最近一个项目中,为App开发后台接口,技术选型为最新 .net core版本,使用.net core开发web api接口过程中,为了方便app团队成员直接在线调用接口,找了公网上的一台服务器做为ap ...

  9. Azure Web App (一)发布你的Net Core Web 项目

    一,引言 今天我们看一下Azure上的一个服务-----Web 应用,我们都知道云计算的三大模式:Iaas(基础设施即服务),Paas(平台即服务),Saas(软件即服务). Iass,其实就是虚拟主 ...

随机推荐

  1. 【Github搬砖】Python入门网络爬虫之精华版

    Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧 ...

  2. Educational Codeforces Round 105 (Rated for Div. 2)

    A. ABC String 题目:就是用'('和')'来代替A,B,C并与之对应,问是不是存在这样的对应关系使得'('和')'正好匹配 思路:第一个和最后一个字母是确定的左括号或者是右括号,这样就还剩 ...

  3. Python数模笔记-NetworkX(2)最短路径

    1.最短路径问题的常用算法 最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径. 1.1 最短路径长度与最短加权路径长度 在日常生活中,最短路径长度与最短路径距离好像并 ...

  4. 3D深色金属哥特3D项目工具小图标icon高清设计素材

    3D深色金属哥特3D项目工具小图标icon高清设计素材

  5. 如何通过CRM解决公司业绩下滑的问题

    大部分公司都需要新客户的支持来维持市场和实现预期的目标.尽管销售部门一直在努力,但这种努力还是无法阻止业绩下降. 想要做到销售增长,不仅要取决企业的进步,还需要改掉使业绩下降的问题.小Z将从四个方面对 ...

  6. [刷题] PTA 查验身份证

    题目: 7-63 查验身份证 (15 分)  一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5, ...

  7. 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)

    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)     概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...

  8. Git工作中的使用

    Git工作中的使用 2019-01-16 14:29:31 雯雯木 阅读数 207更多 分类专栏: 自动化测试   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出 ...

  9. Linux创建RAID0_实战

    Linux创建RAID实战 一.Linux创建RAID0 RAID0俗称条带,它将两个或多个硬盘组成一个逻辑硬盘,容量是所有硬盘之和 因为是多个硬盘组合成一个,故可并行写操作,写入速度提高,但此方式硬 ...

  10. 攻防世界(七)ics-06

    攻防世界系列:ics-06 1.打开题目 很LiuPi的样子,根据题目提示点开报表中心(其他的点开没什么变化) 注意到URL中有?id=1,测试其他数值无果 3.抓包对id爆破 设置1-10000,爆 ...