写点什么

自动发布.NET Core Web 应用

用户头像
DisonTangor
关注
发布于: 2021 年 05 月 11 日
自动发布.NET Core Web应用

1 原因和目的

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

2 工作原理

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

2.1 图解

原理图解


  1. PC 1

  2. 作为开发者的客户端,编写代码

  3. 通过 Git client 提交代码,并 Git push 至 CentOS 服务器

  4. CentOS 7

  5. 作为 Git Repository

  6. 部署 Jenkins,持续集成 Git Repository 的代码

  7. 通过 Syncthing 同步发布编译的代码至 WindowsServer 服务器

  8. Windows Server 2012 R2

  9. 部署 Jenkins,持续集成 Git Repository 的代码

  10. 通过 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,软件如下:

  2. 安装.net core 3.1 sdk

  3. 安装 Visual Studio 2019

  4. 安装最新版 Git

  5. CentOS 7, 软件如下:

  6. 按照官网的步骤安装.net core 3.1 sdk

  7. 安装 OpenJDK 11 及以上版本

  8. 安装 Tomcat 9 及以上版本

  9. 在 Jenkins 官网下载 war 包,复制到 Tomcat 的 webapps 目录下,并按照提示操作。

  10. 通过 rpm -e 卸载低版本的 git,并安装新版的 Git

  11. 下载并安装 Syncthing,官方提供了 GTK 客户端或无 GUI 版(CLI 及 Web 版本),我安装的是后者 syncthing-linux-amd64-v1.16.1.tar.gz 文件(替代方案是 FTP 服务或其他文件同步工具,读者可以自行研究)

  12. Windows Server 2012,软件如下:

  13. 安装 Chrome 浏览器,原因是 IE 的安全等级默认最高,不利于网页浏览。

  14. 安装.net core 3.1 sdk

  15. 安装 OpenJDK 11 及以上版本

  16. 安装 Tomcat 9 及以上版本

  17. 在 Jenkins 官网下载 war 包,操作同 CentOS。

  18. 安装最新版 Git

  19. 下载并安装 Syncthing,官方提供了 GTK 客户端或无 GUI 版(CLI 及 Web 版本),我安装的是后者 syncthing-windows-amd64-v1.16.1.zip(替代方案是 FTP 服务或其他文件同步工具,读者可以自行研究)

  20. 下载安装 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 执行文件 参考文档

  8. tomcat@syncthing$ ./syncthing

  9. 在 Windows server 服务器中,运行 syncthing 解压目录下的 syncting 执行文件,双击 exe 即可

  10. 配置 CentOS 下/用户空间/.jenkins/workspace/自由项目名目录与 Windows Server 的本地某个目录同步,并配置 IIS 服务指向Windows下该目录\bin\Release\netcoreapp3.1\publish目录

  11. 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 等其他开发语言来制作脚本或工具。

发布于: 2021 年 05 月 11 日阅读数: 19
用户头像

DisonTangor

关注

怀揣一个武侠梦的男孩 2020.07.29 加入

还未添加个人简介

评论

发布
暂无评论
自动发布.NET Core Web应用