Jenkins 流水线远程部署 .NET Core/Framework 到 IIS
在本章中,将会介绍在 Windows Jenkins 上,编译 .NET Core、.NET Framework 项目,以及远程部署到 IIS 中。
Windows
我们先在 Windows 上安装好相应的环境。
Jenkins 依赖于 JDK 11,请自行查找方法安装。
在 https://www.jenkins.io/download/ 中可以下载到 Windows Jenkins 版本的安装包,下载完毕后,直接安装即可,安装完成后会自动启动。
Jenkins 的安装目录默认为:C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins.jenkins,密码/密钥一般在其目录下的 secret-file 文件。
安装 Jenkins 后,打开 8080 端口访问 Jenkins,然后根据 https://www.cnblogs.com/whuanle/p/14928651.html#安装插件 一节,把插件安装好,再额外安装一个 powershell 插件。
安装 Git
接着,在 Windows 服务器中,将 Git 安装好,一般 Git 的安装目录为 C:\Program Files\Git。
然后添加下面两个 Git 相关的目录到系统环境变量中。
C:\Program Files\Git\cmd
C:\Program Files\Git\usr\bin
如不配置
C:\Program Files\Git\usr\bin到环境变量,会出现 nohup 错误,Jenkins 依赖 nohup 命令。
WebDeploy
WebDeploy 是一个 IIS 远程部署工具,通过 WebDeploy 我们可以很方便地打包应用远程部署到 IIS 中,而不需要手动重启、更替网站文件、重启程序池等。WebDeploy 下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=43717
安装完成后,其程序默认安装目录为:
C:\Program Files\IIS\Microsoft Web Deploy V3
请添加此目录到系统环境变量中。
同时,在要被远程部署的服务器中,也安装 WebDeploy。
Windows 从节点
如果你有一台 Jenkins Master 服务器,然后再添加 Windows Jenkins Node,做主从 Jenkins,那么可以按照下面的方法将 Windows 加入到 Linux 节点中。
如果你只部署 Windows ,那么 Windows 上的的 Jenkins 就是 Master,可以跳过此步。
打开 Master Jenkins 的 Web 界面,在左侧菜单导航中打开 Manage Jenkins,然后在 System Configuration 中,选择 Manage Nodes and Clouds。

然后添加新的节点 “New Node”。
节点名称可随意,在接下来要求填写的 Label 中,需要填写 “windows” ,当然填写其它标识也行,但是一般 Label 用来标识系统特性的,另外也会要求填写构建目录,这是用于存放 Jenkins 工作时的文件,例如拉取代码、执行命令等,都会在这个目录下操作。

点击蓝色字体的 agent.jar,可以下载 java 包。

将 agent.jar 包放到 Jenkins 所在的 Windows 中,然后按照提示的命令,启动 agent.jar。
就是把 agent.jar 放到目录中,然后打开 powershell 或者 cmd,复制上面的
Java -jar agent.jar -jnlpUrl .....命令,直接执行就行。
接着,在 Jenkins 界面,可以看到另一台 Windows 从节点已经加了上去。

.NET Core
这一小节,介绍如何构建、远程部署 .NET Core 应用到 IIS 中。
对于 .NET Core 应用,其过程比较简单,只需要安装 .NET Core SDK 即可,无需再额外操作。
.NET Core 各类版本下载地址:
https://dotnet.microsoft.com/download/dotnet
.NET Core 3.1 版本下载地址:
处理 IIS
在你要部署应用的那台 Windows 服务器 上,打开 IIS ,点击 ”应用程序池“,然后添加一个新的。

接着,添加一个网站。

然后开始添加一个新用户,点击主机名称,然后点击 “IIS 管理器用户”,然后添加一个用户。


然后为网站启用 WebDeploy 部署。


处理项目 Jenkinsfile
笔者已经上传了 Demo 项目已经 Jenkinsfile 文件,读者直接 fork 项目即可,示例项目在 coreiis 分支中。
https://github.com/whuanle/DotNetCoreJenkinsDemo/tree/coreiis
然后,下载源码,修改一下 Jenkinsfile 文件。
// IIS 配置,远程发布的变量
IISTMP = 'C:/webdemo_tmp' // 用于打包发布的临时目录
IISAPP = 'jenkinsdemo.com' // 网站名称
IISADDR = 'https://192.168.0.66:8172/msdeploy.axd' // WebDeploy 的地址
IISUSER = 'jenkinesdemo' // 用于登录到 IIS 的账号密码
IISADMIN = 'jenkinesdemo'
按照笔者的 demo,读者只需要修改一下 IISADDR 中的 IP 和 用户名或密码即可。
接着,使用 Jenkins ,添加流水线部署即可。这里不再赘述 Jenkins 上的新建流程,读者可以参考笔者的另一篇文章:
https://www.cnblogs.com/whuanle/p/14928651.html#构建流水线
.NET Framework
为了能够编译 .NET Framework 应用,我们需要搭建起 .NET Framework 应用的编译环境,由于 .NET Framework 严重依赖 Vistual Studio,如果脱离 VS 环境,则需要安装很多环境工具,才能使用命令编译程序,比较麻烦,读者需要耐心处理。
示例项目笔者已经上传到 https://github.com/whuanle/DotNetCoreJenkinsDemo/tree/fxiis 中。
安装环境
.NET Framework SDK
.NET Framework 包提供编译、运行 .NET 程序的环境。
安装 .NET Framework 框架,其版本不定,按照要编译的项目其需要的版本为准,可安装多个版本。
例如 .NET Framework 4.6.1 和 .NET Framework 4.6.1 Developer Pack 。
下载地址:https://dotnet.microsoft.com/download/dotnet-framework
MSBuild
MSBuild 是一个 .NET 程序的编译工具,可以在脱离 VS 环境时使用。
如果要编译 .NET Framewrok 项目,例如 4.6,请使用 MSBuild 14(对应 VS 2015),一般文件名称为 BuildTools_Full_14.exe。
下载地址:
https://www.microsoft.com/en-US/download/details.aspx?id=48159
https://github.com/EWSoftware/SHFB/releases
安装 MSBuild 后其目录位置为:
C:\Program Files (x86)\MSBuild\14.0\Bin
请将其目录路径添加系统环境变量中。
Nuget
nuget 用于还原项目的依赖,对于 .NET Framework 项目,nuget 的版本不能为 5.0 以上,建议使用 4.5 版本左右,否则会有兼容问题!
安装完毕后,nuget 程序目录为:
C:\Program Files\nuget
请添加目录到系统环境变量中。
安装各种需要的工具后,环境变量一共需要添加以下项:
C:\Program Files (x86)\MSBuild\14.0\Bin
C:\Program Files\Git\cmd
C:\Program Files\nuget
C:\Program Files\Git\usr\bin
C:\Program Files\IIS\Microsoft Web Deploy V3
请仔细检查是否有遗留项。
配置项目
要脱离 VS 环境,自动化构建 .NET Framework 应用,需要处理的配置文件和环境很多,我们需要修改一下项目。在本节中,将介绍如何配置 .NET Framework 自动化流水线的构建,使用 Jenkins 配置流水线,编写 Jenkins 脚本等。
一般一个解决方案中,有一个是需要发布的主程序(主要为 Web 应用),请为需要发布的 Web 项目,添加 Nuget 引用,搜索 MSBuild.Microsoft.VisualStudio.Web.targets 包,添加引用到项目中。
因为 .NET Framework 项目需要依赖 Vistual Studio 发布,如果不使用 VS 发布,会出现很多问题,为了脱离 VS 环境,有人封装了一个完整的 targets 文件,指示 MSBuild 如何编译此此程序。
对于需要发布的 Web 项目需要定义 Web 发布属性,自动化构建中,依赖这些提前配置的属性,这些属性会生成一个 .pubxml 文件,随源代码一起上传到仓库。

然后点击发布,手动发布一次到一个目录。

保存设置后,在项目的 Properties\PublishProfiles 目录,可以找到 FolderProfile.pubxml 文件,其中有一行 PublishUrl 属性,为网站发布时的输出目录。
<PublishUrl>C:\test</PublishUrl>
此目录配置会影响到自动化构建时的输出,编译时,生成的文件会输出到这个目录中,请确保在 Windows Jenkins 中,存储此盘符!
然后直接在 Jenkins Web 上,操作即可。

前后端分类方案
当我们为 .NET Core / .NET Framework 项目创建网站完毕,此时程序跟前端是一起的,打包发布不方便。
我们可以为前端项目新建一个无用的网站。

我可以编写流水线脚本,将前端文件通过 WebDeploy 自动打包发布到此网站中。
接着,在后端网站中,添加一个虚拟目录,目录跟前端网站的目录一致。

这样,前后端都可以分开部署,而在后端网站后,可以直接读取前端文件。
Jenkins 流水线远程部署 .NET Core/Framework 到 IIS的更多相关文章
- Linux文档整理之【Jenkins+Docker自动化部署.Net Core】
这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录. Jenkins是基于Java开发的一种持续集成工具,主要用于持续.自动的构建/测试软件等相 ...
- JenKins使用pm2部署.net core网站
登录事先准备好的 Jenkins 1 新建任务 2 源码管理 git 输入正确地址 3 构建环境:Delete workspace before build startsAbort the build ...
- 最详细之教你Jenkins+github自动化部署.Net Core程序到Docker
环境 centos7.9,.NET5 一.Jenkins搭建 1)下载Jenkins的war包 在\home目录建一个jenkins目录放jenkins的包 #进入\home目录 cd \home # ...
- jenkins 流水线自动化部署 手动下载安装插件包
如果有些插件不能通过可选插件安装,可以进行选择高级并上传插件包,插件包链接地址为:http://updates.jenkins-ci.org/download/plugins/ 同时在高级中可以更换下 ...
- Jenkins远程部署SpringBoot应用
一般Web工程通过Jenkins远程部署到Tomcat,可以采用Maven的tomcat-maven-plugin插件进行部署.最近接触到Spring Boot工程的部署,由于Spring Boot应 ...
- Jenkins通过Publish over SSH插件实现远程部署
Jenkins通过Publish over SSH插件实现远程部署 步凑一.配置ssh免秘钥登录 部署详情地址:http://www.cnblogs.com/Dev0ps/p/8259099.html ...
- [原]jenkins(六)---jenkins远程部署脚本
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...
- Jenkins进阶-应用的远程部署(12)
越来越多的公司部署需要实现自动化模式,大家的首选的工具就是Jenkins,下来介绍下通过Publish Over SSH Plugin插件实现远程部署: 一.安装插件Publish Over SSH ...
- 使用Jenkins远程部署war包到tomcat container
Jenkins首先使用maven将源代码进行编译打包,之后需要将war包传送到tomcat服务器上进行部署. 来看一下Jenkins的基本配置,首先需要安装插件"Deploy to cont ...
随机推荐
- 使用C#进行数据库增删改查ADO.NET(二)
这节接着讲用C#进行数据库CRUD,高级部分. 事务: 事务是执行一批sql语句,如果中途失败,全部回滚,数据不会受影响,中途没有出错则会提交事务,真正对数据进行修改.C#提供了SqlTransac ...
- repo sync error: .repo/manifests/: contains uncommitted changes
andorid 源码库同步,报错如标题,好几次想放弃,尝试了网上不少办法,无效, 最终从 stackoverflow 得到答案: After issued repo sync, I got a err ...
- ROS之初见Hello World
前言 最近在玩ROS,笔记中断了一段时间. ROS即Robot Operating System,机器人操作系统,是一个开源框架,主力语言是C++和python,提供了硬件抽象.设备驱动.库函数.可视 ...
- 克鲁斯卡尔(Kruskal)算法
概览 相比于普里姆算法(Prim算法),克鲁斯卡尔算法直接以边为目标去构建最小生成树.从按权值由小到大排好序的边集合{E}中逐个寻找权值最小的边来构建最小生成树,只要构建时,不会形成环路即可保证当边集 ...
- [bug] vue cli 部署在 springboot中报404
复制资源时,在static目录下新建了一个static目录,估计是引起了spring解析的混乱,改为one后即可正常访问 参考 https://www.cnblogs.com/qianjinyan/p ...
- [bug] IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
原因 jdk版本选低了 解决 将以下几处jdk版本修改为1.8 Project Structure(File->Project Structure...)>Sources>Langu ...
- mysql基础之帮助信息
在mysql中获取帮助 1.当连接到mysql数据库以后,使用help命令或者\?表示获取帮助信息: MariaDB [ren]> help General information about ...
- MyBatis 环境搭建(四)
MyBatis 引言 在回顾JDBC时,我们已经创建有 Java 工程,而且也已经导入 mysql 依赖包,这里就直接在原有工程上搭建MyBatis环境,以及使用MyBatis来实现之前用 JDBC ...
- fdisk 磁盘分区命令
fdisk fdisk磁盘分区命令 -v 打印 fdisk 的版本信息并退出.-l 列出指定设备的分区表信息并退出. 如果没有给出设备,那么使用那些在 /proc/partitions ( ...
- JAVA基础语法-day01
JAVA基础语法 1.注释 单行注释--// 多行注释--/* */ 文档注释--/** */ 2.标识符 只能大小写字母,$,下划线开头,其它不行. 3.数据类型 基本数据类型--整数,浮点,字符, ...