通过云效流水线Flow,自动化实现Windows环境下的Web服务构建与部署。
前提条件
请确保已准备了2台阿里云ECS实例或者非阿里云服务器,在本示例中分别将2台服务器称为A服务器和B服务器。
A服务器,用于Web服务IIS环境主机。
B服务器,用于版本构建环境主机。
步骤一:安装IIS(Internet Information Server)Web服务组件
在A服务器上,打开Server Manager服务器管理器,选择顶部菜单栏Manage,单击Add Roles and Features,在弹出的安装步骤配置向导中,开始步骤操作。
选择安装类型Role-based or Feature-based Installation。
服务器选择Server Selection:选择默认的本地机器,根据需求选择合适的机器。
服务器角色Server Roles:请单击勾选Web Server(IIS),并同时勾选以下三个选项。
IIS Management Scripts and Tools
Management Service
IIS Management Console
功能Features:此项可以不用选择,因为IIS不需要额外的Features。
在Role Services:根据需求选择此项的设定,也可以保留默认设定。
进入Confirmation确认步骤,单击按钮Install,安装完成后点击Close关闭。
步骤二:安装IIS插件Web Deploy
在A服务器上,安装Web Deploy,请务必选择全部安装而非典型安装。
说明下载插件Web Deploy 4.0。
什么是 Web Deploy?Web Deploy 是一个可扩展的客户端-服务器工具,用于将内容和配置同步到 IIS,比如开发人员将已编译的 Web 应用程序(ASP .Net、PHP 等)从开发人员工具(Visual Studio、WebMatrix 等)同步(又称为“发布”)到 IIS。
如果选择的自定义安装,需要安装下方截图中的所有组件。如果安装的选项比截图的有缺少,说明之前安装IIS中少安装了Management相关组件,需要重新安装Web服务组件Add Roles and Features。
(可选)通过打开
验证 Web 部署是否正确运行,查看以下服务状态:Web部署代理服务,正在运行(旧版本中的服务名称不同)。
Web管理服务,正在运行。
说明如果某个代理服务未运行,请重新启动“Web 部署代理服务”。
如果 Web 部署代理服务根本不存在,请在
,查找“Microsoft Web 部署 <版本>”。 选择“更改”安装,并确保对 Web 部署组件选择“将安装到本地硬盘”,完成更改安装步骤。
步骤三:安装组件dotnet-hosting
在A服务器上,需要安装dotnet-hosting组件模块,为了确保网站资源正常访问。如果没有安装dotnet-hosting组件,那么服务资源访问时候就会报HTTP错误500.19。
下载windows-hosting-bundle并运行安装组件。
说明“dotnet-hosting”用于支持.NET Core应用程序在IIS(Internet Information Services)上运行。使得IIS能够识别并管理.NET Core应用。
步骤四:创建Web网站并配置发布功能Web Deploy
在A服务器上,开始菜单中,选择Windows管理工具,单击启动Internet Information Services(IIS)管理器,或者运行命令
inetmgr.exe
。在左侧菜单,右键单击Sites网站,选择Add Website添加网站。
在Website配置面板中,根据需求填写Site name网站名称和Physical path网站路径,单击OK。
右键单击已创建的Web网站,选择
。说明如果没有Deploy这个选项,说明之前的Web Deploy没有正确安装和运行。
检查弹出面板中的各项参数,默认URL for the publishing server connection端口为8172,可以保留这个端口,也可以设置为其它端口。URL中的host name(8172端口冒号前部分)可以不用修改,在构建机中部署Deploy时,将用IP地址代替host name。
(可选)如果是阿里云ECS,我们需要打开防火墙,允许外部对于Server的 8172、80端口的访问。
说明选择目标实例的安全组,根据需求添加规则,添加入方向端口80和8172,授权对象源设置特定IP地址段或者全放开。
步骤五:配置Windows构建机
在B服务器上,安装环境依赖工具,根据需求选择版本安装。
Visual Studio 2022 webdeploy_amd64_zh-CN.msi dotnet-sdk-6.0.202-win-x64.exe
安装完成后,配置环境变量,将以下路径添加到
Path
系统变量或者用户变量。C:\Windows\Microsoft.NET\Framework64\v4.0.30319 C:\Program Files\IIS\Microsoft Web Deploy V3 C:\Program Files\dotnet
说明在安装dotnet时已经添加环境变量,如果没有找到dotnet,可以手动添加。
环境变量配置完成后,打开Windows PowerShell命令窗口,测试命令
msbuild
、msdeploy
、dotnet
是否执行成功,以确保成功安装和配置环境变量。
步骤六:创建流水线Flow任务
在Flow中添加私有Windows构建机,具体操作请参阅构建集群。
登录流水线Flow服务控制台,在控制台界面新建流水线,根据需求选择合适的流水线模板,单击创建按钮。
添加流水线源任务,在右侧滑出面板中,根据需求选择合适代码源,完成代码源流水线任务配置。
配置构建任务,在下个阶段区域,添加执行命令任务类型,在面板中完成配置参数。
任务名称:自定义任务名称。
构建集群:在私有构建集群中,选择私有目标Windows构建主机。
指定构建节点:选择构建环境
Windows/amd64
。构建环境:单击选中默认VM环境。
在任务步骤中,配置执行命令参数。
步骤名称:自定义名称。
执行命令:填写构建命令。
dotnet msbuild /p:Configuration=Debug /t:Publish
是否指定运行Shell:单击勾选,选择Shell类型
powershell
。
配置部署任务,在下个阶段区域,添加执行命令任务类型,在面板中完成配置参数,请参考上述步骤4的参数配置。
在任务步骤中,配置执行命令参数。
步骤名称:自定义名称。
执行命令:填写Web Deploy自动部署命令。
# input your command here $PUBLISH_BASE = (Get-Item .).FullName | Out-String $PUBLISH_PATH = Join-Path -Path $PUBLISH_BASE.Trim() -ChildPath "bin\Debug\net6.0\publish" & 'C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy' -verb:sync -source:contentPath=${PUBLISH_PATH} -dest:contentPath=DemoWin,computerName=https://xx.xxx.xxx.xx:8172/MsDeploy.axd?site=DemoWin,userName=YOURUSERNAME,password=YOUPASSWORD,authtype="Basic",includeAcls="False" -allowUntrusted -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -verbose
说明命令参数介绍:
-source:contentPath:指定需要发布的路径,这里的路径是上文中dotnet msbuild以后的output路径。
-dest:contentPath:指定目标机器地址和站点名称,自定义站点名称是DemoWin,computerName设置A服务器公网地址、网站名称、服务器登录用户名和密码。
是否指定运行Shell:单击勾选,选择Shell类型
powershell
。
保存并执行流水线,完成构建并运行成功的流水线任务后,在浏览器中访问IIS网站资源。
步骤七:添加Packages(可选)
可以使用云效Packages创建一个NuGet制品库,以管理二方制品和三方制品,在代码源中添加以下依赖库,此时msbuild不能成功运行,因为缺少依赖包。
using Newtonsoft.Json;
请访问官方网站,下载NuGet依赖包Newtonsoft.Json。
打开云效 Packages,创建一个新的 NuGet 制品仓库。
根据仓库指南,在本地进行配置,首先在本地设置仓库凭证,然后将Newtonsoft.Json依赖包push到仓库中。
推送成功后,可以在 packages 中确认已添加该包。
根据仓库指南中的第三条指令,在B服务器的本地构建环境中进行该软件包的添加测试。然后执行构建指令
dotnet msbuild
成功运行。在流水线中,也可以调用相关的包,需要将流水线源更换为(该仓库已添加using Newtonsoft.Json):
gi*@atomgit.com:oauth2_xxxxxx/PackagesDemo.git
将流水线构建任务进行扩展。
dotnet nuget add source http://yunxiao-poc.devops.aliyuncs.com:80/packages/02e873bb-xxxx-xxxx-xxxx-ec2298c5385d/nuget/repo-hzaul/index.json -n repo-hzaul -u "xxxxxxxxxxx" -p "xxxxxxxxx" dotnet add package Newtonsoft.Json --source http://yunxiao-poc.devops.aliyuncs.com:80/packages/02e873bb-xxxx-xxxx-xxxx-ec2298c5385d/nuget/repo-hzaul/index.json dotnet msbuild /p:Configuration=Debug /t:Publish
保存后运行,流水线就可以正常调用packages。