Asp.Net Core&Jenkins持续交付到Windows Server

  对于Linux平台上的持续集成和持续交付可使用Docker快捷的完成任务,可是Windows Server下却很差使用,通常来说,windows Server下最简单的发布方式是直接手动打包发布或是利用webDeploy完成,可是手动发布太麻烦,webDeploy配置也麻烦,所以尝试使用Jenkins+Powershell,将代码拉取到Windows Server上而后经过dotnet命令发布,并经过Powershell更新相应的网站,可是首次网站配置工做,仍是得手动进行发布工做,对于在公司内部服务器测试来说,能够减轻许多工做量,作到代码合并到主干便可更新测试服务器。html

  本地环境及工具:Windows Server 2008R2+Jenkins+Powershell+.Net Core2.2 java

 

1、服务器安装Jenkins

    从Jenkins官网下载Windows下的Jenkins程序,下载的压缩包解压后为msi版本,做为系统服务在后台运行,移入到服务器中git

   

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

  

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

  

  下一步安装推荐的插件便可,若是知道哪些插件要安装则选择另外一个选项,此处我选择第一个也是默认选项,而后等待安装便可。windows

  

  安装完毕,配置管理员帐号密码完毕便可,完成后自动跳转到Jenkins中,下次登陆时须要用刚配置好的帐号密码登陆。服务器

  

 

2、服务器配置IIS、安装.Net Core SDK及AspNetCoreModule

  一、配置IIS及相关须要的服务:微信

  经过图形界面配置IIS并安装须要的服务,可参考Windows ServerR2配置教程:https://jingyan.baidu.com/article/5d6edee2e034f099eadeec3c.htmlapp

  

  或经过脚本配置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的脚本等待安装直到成功。

  

 ·

  二、安装.Net Core环境:

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

   

 

  三、脚本一键安装并配置:

  经过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

}

 

  四、配置IIS应用程序池:

  在IIS中配置应用程序池已知足.Net Core为自宿主类型,IIS只是起到反向代理做用。

  

 

3、使用Powershell脚本完成项目发布、更新网站

  一、在Jenkins中配置流水线,选择新增一个任务并选择构建自由风格软件项目, 配置Git地址,若是出现以下错误信息则须要在服务器上安装Git,直接下载Git安装到服务器中,并在Jenkins中配置

    Failed to connect to repository:Error performing command:git.exe ls-remote-h ........ 

  在Jenkins首页左侧系统管理->全局工具配置中找到Git,而后修改成安装路径下.exe所在位置,保存便可,再次回到项目制定处填写Git地址错误消失。

  

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

  

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

  

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

   

  在powershell中涉及到还原依赖包、编译代码、中止站点、发布项目,重启站点等等......,对于站点名称,应用程序池,发布路径,站点路径等都由本身决定,保存后,执行构建,或改动代码触发构建,还可接入邮件通知功能。

# 还原项目
dotnet restore

# 编译项目
dotnet build

# 定义站点名称
$websiteName="limsSite"

# 应用程序池
$applicationPool=".NetCore"

# 临时发布路径
$publishTempPath="D:\Project\LimsSiteTemp"

# IIS站点路径
$publishPath="D:\Project\LimsSite"

# 指定发布路径
dotnet publish -o $publishTempPath -c Release

# 关闭站点
C:\Windows\System32\inetsrv\appcmd.exe stop site $websiteName

# 中止指定应用程序池: 
# C:\Windows\System32\inetsrv\appcmd.exe stop apppool /apppool.name:"$applicationPool"

# 复制文件到IIS站点下
Copy-Item $publishTempPath  $publishPath

# 启动指定应用程序池: 
# C:\Windows\System32\inetsrv\appcmd.exe start apppool /apppool.name:"$applicationPool"

# 启动站点
C:\Windows\System32\inetsrv\appcmd.exe start site $websiteName

# 删除站点
# C:\Windows\System32\inetsrv\appcmd.exe delete site $websiteName

  至此,Jenkins&Asp.Net Core持续交付到Windows Server上,方便快速测试服务器的发布工做也就完成了,可能还留有坑,暂时不影响。

 

 欢迎关注微信订阅号,有新的文章将同步到订阅号中

 

2019-03-21,望技术有成后能回来看见本身的脚步
相关文章
相关标签/搜索