Asp.Net Core&Jenkins持续交付到Windows Server
对于Linux平台上的持续集成和持续交付可以使用Docker快捷的完成任务,但是Windows Server下却不好使用,一般来讲,windows Server下最简单的发布方式是直接手动打包发布或是利用webDeploy完成,但是手动发布太麻烦,webDeploy配置也麻烦,因此尝试使用Jenkins+Powershell,将代码拉取到Windows Server上然后通过dotnet命令发布,并通过Powershell更新相应的网站,但是首次网站配置工作,还是得手动进行发布工作,对于在公司内部服务器测试来讲,可以减轻许多工作量,做到代码合并到主干即可更新测试服务器。
本地环境及工具:Windows Server 2008R2+Jenkins+Powershell+.Net Core2.2
一、服务器安装Jenkins
从Jenkins官网下载Windows下的Jenkins程序,下载的压缩包解压后为msi版本,作为系统服务在后台运行,移入到服务器中

执行安装,按照正常的安装步骤安装即可

安装完毕会自动打开网站或手动访问localhost:8080,开始配置Jenkins,找到网站中指定的路径中,拿到生成的密码解锁Jenkins。

下一步安装推荐的插件即可,如果知道哪些插件要安装则选择另一个选项,此处我选择第一个也是默认选项,然后等待安装即可。

安装完毕,配置管理员账号密码完毕即可,完成后自动跳转到Jenkins中,下次登录时需要用刚配置好的账号密码登录。

二、服务器配置IIS、安装.Net Core SDK及AspNetCoreModule
1、配置IIS及相关需要的服务:
通过图形界面配置IIS并安装需要的服务,可参考Windows ServerR2配置教程:https://jingyan.baidu.com/article/5d6edee2e034f099eadeec3c.html

或通过脚本配置IIS,打开Windows Powershell Modules工具,先通过命令查看本地的功能。
get-command -module servermanager

如我本地是Add-开头,则需要将Install-WindowsFeature更换成Add-WindowsFeature,否则稍后的操作会得到如下错误,在2008R2上是Add-开头,而在2008R2以后的版本是Install-开头,此部分可以查看微软官方文档。

再次查看IIS服务并得到展示可以选择的服务,该部分服务就是图形化界面中的选项菜单,选择好需要的服务后
get-windowsfeature web*

执行以下命令完成脚本配置IIS,可以比对脚本内的服务和powershell中的服务,直接继续按照命令安装即可,至此IIS配置及安装需要的服务完成。
$IISFeatures = "Web-WebServer","Web-Common-Http","Web-Default-Doc","Web-Dir-Browsing","Web-Http-Errors","Web-Static-Content","Web-Http-Redirect","Web-Health","Web-Http-Logging","Web-Custom-Logging","Web-Log-Libraries","Web-ODBC-Logging","Web-Request-Monitor","Web-Http-Tracing","Web-Performance","Web-Stat-Compression","Web-Security","Web-Filtering","Web-Basic-Auth","Web-Client-Auth","Web-Digest-Auth","Web-Cert-Auth","Web-IP-Security","Web-Windows-Auth","Web-App-Dev","Web-Net-Ext","Web-Asp-Net","Web-ISAPI-Ext","Web-ISAPI-Filter","Web-Mgmt-Tools","Web-Mgmt-Console"
Install-WindowsFeature -Name $IISFeatures
可能会得到如下错误信息,需要修改Powershell的执行策略。

先通过命令查看当前策略
get-executionpolicy
设置当前计算机允许执行脚本
set-executionpolicy remotesigned
再次执行配置IIS的脚本等待安装直到成功。

·
2、安装.Net Core环境:
先从官网下载.Net Core SDK和用于与IIS打交道的Runtime & Hosting Bundle,.Net Core SDK不是必须的,如果服务器上只做运行环境的话,但是考虑到做持续交付,得用到SDK完成编译、发布,因此还是装上SDK。此处以.Net Core2.2版本为例下载,然后执行安装,可能得注意下安装顺序,先安装SDK程序,后安装Runtime&HostingBundle程序,安装完毕后在IIS的模块页中查看刚刚安装的模块。

3、脚本一键安装并配置:
通过Powershell中执行一整套命令完成IIS、.Net Core SDK和Runtime & Hosting Bundle的安装及配置工作,需要注意的是,该脚本中部分命令需要在Windows Server2008R2后的版本才能运行。
$existDotnet=Test-Path "C:\Program Files\dotnet\dotnet.exe"
if(!$existDotnet){
# Install IIS
$IISFeatures = "Web-WebServer","Web-Common-Http","Web-Default-Doc","Web-Dir-Browsing","Web-Http-Errors","Web-Static-Content","Web-Http-Redirect","Web-Health","Web-Http-Logging","Web-Custom-Logging","Web-Log-Libraries","Web-ODBC-Logging","Web-Request-Monitor","Web-Http-Tracing","Web-Performance","Web-Stat-Compression","Web-Security","Web-Filtering","Web-Basic-Auth","Web-Client-Auth","Web-Digest-Auth","Web-Cert-Auth","Web-IP-Security","Web-Windows-Auth","Web-App-Dev","Web-Net-Ext","Web-Asp-Net","Web-ISAPI-Ext","Web-ISAPI-Filter","Web-Mgmt-Tools","Web-Mgmt-Console"
Install-WindowsFeature -Name $IISFeatures
# Install .NET Core SDK 2.2.104
$downloadNETCoreSDKUrl="https://download.visualstudio.microsoft.com/download/pr/4a195fc9-7696-4c24-add2-e791b399766c/3a67d698a74505b46db9d9779745e47b/dotnet-sdk-2.2.104-win-x64.exe"
Invoke-WebRequest $downloadNETCoreSDKUrl -outfile $env:temp\dotnet-sdk.exe
Start-Process $env:temp\dotnet-sdk.exe -ArgumentList '/quiet' -Wait
# Install the .NET Core Windows Server Hosting bundle
$downloadNETCoreHostingIISUrl="https://download.visualstudio.microsoft.com/download/pr/5efd5ee8-4df6-4b99-9feb-87250f1cd09f/552f4b0b0340e447bab2f38331f833c5/dotnet-hosting-2.2.2-win.exe"
Invoke-WebRequest $downloadNETCoreHostingIISUrl -outfile $env:temp\dotnet-hosting.exe
Start-Process $env:temp\dotnet-hosting.exe -ArgumentList '/quiet' -Wait
# Restart the web server so that system PATH updates take effect
net stop was /y
net start w3svc
}
4、配置IIS应用程序池:
在IIS中配置应用程序池已满足.Net Core为自宿主类型,IIS只是起到反向代理作用。

三、使用Powershell脚本完成项目发布、更新网站
1、在Jenkins中配置流水线,选择新增一个任务并选择构建自由风格软件项目, 配置Git地址,如果出现如下错误信息则需要在服务器上安装Git,直接下载Git安装到服务器中,并在Jenkins中配置
Failed to connect to repository:Error performing command:git.exe ls-remote-h ........
在Jenkins首页左侧系统管理->全局工具配置中找到Git,然后修改为安装路径下.exe所在位置,保存即可,再次回到项目制定处填写Git地址错误消失。

配置完Git地址后的一些信息如下简单设置一下即可

2、项目发布后打包到服务器下,通过IIS增加网站,选择应用程序池,选择物理路径等等操作,保证第一次手动操作的正常运行,此处暂时先跳过,操作简便。

3、在Jenkins中安装一个Powershell插件,在系统管理->插件管理->可用项下搜索Powershell执行安装,在Jenkins项目配置中新增Build环节,选择Powershell,然后完成对网站的更新。

在powershell中涉及到还原依赖包、编译代码、停止站点、发布项目,重启站点等等......,对于站点名称,应用程序池,发布路径,站点路径等都由自己决定,保存后,执行构建,或改动代码触发构建,还可接入邮件通知功能。
# 还原项目
dotnet restore # 编译项目
dotnet build # 定义站点名称
$websiteName="xxxSite" # 应用程序池
$applicationPool=".NetCore" # 临时发布路径
$publishTempPath="D:\Project\xxxSiteTemp" # IIS站点路径
$publishPath="D:\Project\xxxSite" # 关闭站点
C:\Windows\System32\inetsrv\appcmd.exe stop site $websiteName # 停止指定应用程序池:
C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"$applicationPool" # Web项目路径(具体依据实际使用路径)
$projectPath="D:\Program Files (x86)\Jenkins\workspace\xxx\src\xxx.Web.Mvc\xxx.Web.Mvc.csproj" # 指定发布路径
dotnet publish $projectPath -o $publishPath -c Release # 更新应用程序数据库版本
$efCoreProj="D:\Program Files (x86)\Jenkins\workspace\xxx\src\xxx.EntityFrameworkCore"
dotnet ef database update -p $efCoreProj # 复制文件到IIS站点下
# Copy-Item "D:/Project/xxxSiteTemp/*" $publishPath # 启动指定应用程序池:
C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"$applicationPool" # 启动站点
C:\Windows\System32\inetsrv\appcmd.exe start site $websiteName
至此,Jenkins&Asp.Net Core持续交付到Windows Server上,方便快速测试服务器的发布工作也就完成了,可能还留有坑,暂时不影响。
欢迎关注微信订阅号,有新的文章将同步到订阅号中

2019-03-21,望技术有成后能回来看见自己的脚步
Asp.Net Core&Jenkins持续交付到Windows Server的更多相关文章
- Jenkins持续集成学习-Windows环境进行.Net开发1
目录 Jenkins持续集成学习-Windows环境进行.Net开发 目录 前言 目标 使用Jenkins 安装 添加.net环境配置 部署 结语 参考文档 Jenkins持续集成学习-Windows ...
- Jenkins持续集成学习-Windows环境进行.Net开发2
目录 Jenkins持续集成学习-Windows环境进行.Net开发2 目录 前言 目标 使用 .Net Stardard 单元测试 流程 手动执行单元测试 自动执行单元测试 单元测试报告 上传Nug ...
- Jenkins持续集成学习-Windows环境进行.Net开发3
目录 Jenkins持续集成学习-Windows环境进行.Net开发3 目录 前言 目标 优化nuget包生成流程 自动触发构建 Jenkins定时轮询触发 SVN客户端钩子触发 SVN服务器钩子触发 ...
- Jenkins持续集成学习-Windows环境进行.Net开发4
目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...
- .net core 2.2部署到Windows Server 2012 R2 standard
安装.net core 2.2 下载地址:https://dotnet.microsoft.com/download/dotnet-core/2.2 找到ASP.NET Core Runtime 2. ...
- ASP.NET Core Web API 索引 (更新Identity Server 4 视频教程)
GraphQL 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(上) 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下) [视频] 使用ASP.NET C ...
- ASP.NET Core 2.1 Web API + Identity Server 4 + Angular 6 + Angular Material 实战小项目视频
视频简介 ASP.NET Core Web API + Angular 6的教学视频 我是后端开发人员, 前端的Angular部分讲的比较差一些, 可以直接看代码!!!! 这是一个小项目的实战视频, ...
- asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码
前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...
- Asp.net Core Jenkins Docker 实现一键化部署
写在前面 在前段时间尝试过用Jenkins来进行asp.net core 程序在IIS上面的自动部署.大概的流程是Jenkins从git上获取代码 最开始Jenkins是放在Ubuntu的Docker ...
随机推荐
- JS中的top是什么?
<iframe/>或者<frame>里面用主页面的东西,就是top.xxx如:<script> function func(){ ... };</script ...
- 使用Android Studio Gradle实现友盟多渠道打包
最新项目中要求在友盟后台看到不同渠道的统计,Android大大小小的应用市场要几百个,要一个一个手工打包那一天也干不完,还好是有大牛的,弄出了好多解决方法,就Gradle做一下记录和分享,首先看一些理 ...
- Flex 右键菜单控制
//设置监控右键菜单项 private function setUserMenuItem():void{ var contextMenu:ContextMenu = new ContextMenu() ...
- 0510JS流程语句
|--跳转语句|----break; 终止整个循环,不再进行判断|----continue; 终止本次循环,接着去判断是否执行下次循环 |-选择(判断)结构|--if 如果|----if(条件1){ ...
- Hadoop 3.x 新特性剖析系列2
1.概述 接着上一篇博客的内容,继续介绍Hadoop3的其他新特性.其内容包含:优化Hadoop Shell脚本.重构Hadoop Client Jar包.支持等待Container.MapReduc ...
- day13_Mysql事务与数据库连接池学习笔记
一.Mysql事务 事务: 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功(数据回滚). 例如:A给B转帐,对应于如下两条sql语句 : update account ...
- 【Android学习笔记】Android Studio简单断点调试
首先点击断点调试按钮运行App 启动之后,会弹出如下图的提示框,不要管,几秒之后这个弹框会自动消失,然后App会成功运行. 下面介绍一下断点调试的相关操作按钮对应的功能: 按钮1的功能:从当前断点跳到 ...
- Python_字符串简单加密解密
def crypt(source,key): from itertools import cycle result='' temp=cycle(key) for ch in source: resul ...
- linux内核中断之看门狗
一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...
- 并发库应用之十三 & 并发集合类的应用
传统集合实现同步的问题 举了一个例子:Map集合线程不同步导致的问题. 解决办法:使用同步的Map集合 使用集合工具类中的方法将不同步的集合转为同步的Collections.synchronizedM ...