本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。
方案架构
Cloud Native
本次实战教程中准备了两台机器,一台是用于构建的 Windows 构建机,需要我们添加到 Flow 流水线中;另一台是 Windows Server,作为 msdeploy 的对象,用于部署 .NET 应用服务。整体架构如下:
本方案中用到的示例代码工程如下:
https://atomgit.com/oauth2_o72n54/FlowDemoWin
https://atomgit.com/oauth2_o72n54/PackagesDemo(添加了 using Newtonsoft.Json 依赖。)
环境准备
Cloud Native
2.1.1 开启 IIS 服务
2.1.2 安装 Web Deploy
2. 运行下载的安装程序,请注意,请务必选择全部安装而非典型安装。如果我们选择自定义安装,可以看到以下页面,我们需要安装其中的所有组件。如果安装选项比起下图有缺少,说明之前安装 IIS 中少安装了 Management 相关组件,需要重新 Add Roles and Features。
3.(可选)通过打开“控制面板”>“系统和安全”>“管理工具”>“服务”来验证 Web 部署是否正确运行,然后确保:
“Web 部署代理服务”正在运行(旧版本中的服务名称不同)。
“Web 管理服务”正在运行。
2.1.3 安装 ASP.NET Core windows-hosting-bundle
2.1.4 添加 Web 网站并开启 Web Deploy 发布功能
2. 在打开的 Website 窗口中,填写 Site name 和 Physical path,然后点击 ok。此处 Site name 填写为 DemoWin。
5.(可选)如果 Windows Server 位于阿里云 ECS,我们需要打开防火墙,允许外部对于 Server 的 8172、80端口的访问。操作路径:到 ECS 控制台 > 选择实例 > Windows Server 对应的实例 > 安全组 > 入方向手动添加,端口选择 80 和 8172, 授权对象选【0.0.0.0/0】。
2.2.1 安装构建工具和发布工具
C:\Windows\Microsoft.NET\Framework64\v4.0.30319 C:\Program Files\IIS\Microsoft Web Deploy V3
dotnet 对应的 path 在安装时已经添加,如果没有找到 dotnet,可以手动添加:
C:\Program Files\dotnet
安装结束以后,我们可以到 cmd 中尝试一下 msbuild、msdeploy、dotnet 命令是否成功安装和添加到 Path。
2.2.2 在本地构建 Demo 工程并发布
git clone https://atomgit.com/oauth2_o72n54/FlowDemoWin
2. 构建工程:
# mubuild 构建
dotnet msbuild /p:Configuration=Debug /t:Publish
# /p:Configuration=Debug 是构建出Debug版本
msdeploy -verb:sync -source:contentPath="C:\Users\Administrator\source\repos\FlowDemoWin\bin\Debug\net6.0\publish" -dest:contentPath=DemoWin,computerName=https://<Windows Server IP>:8172/MsDeploy.axd?site=DemoWin,userName=YOURUSERNAME,password=YOURPASSWORD,authtype="Basic",includeAcls="False" -allowUntrusted -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -verbose
# 上述 <Windows Server IP> 请替换为 Windows Server 的 IP
# -source:contentPath 用于指定需要发布的路径,这里的路径是上文中dotnet msbuild以后的output路径
#-dest:contentPath 用于指定目标机器和站点:这里我们的站点为DemoWin
基于云效 Windows 构建环境和
Nuget 制品仓库实现 .NET 应用持续交付
Cloud Native
git .com:oauth2_o72n54/FlowDemoWin.git
dotnet msbuild /p:Configuration=Debug /t:Publish
# 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://<Windows Server IP>:8172/MsDeploy.axd?site=DemoWin,userName=YOURUSERNAME,password=YOUPASSWORD,authtype="Basic",includeAcls="False" -allowUntrusted -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -verbose
# 上述 <Windows Server IP> 请替换为 Windows Server 的 IP
git .com:oauth2_o72n54/PackagesDemo.git
# 配置 nuget 仓库凭证
dotnet nuget add source http://yunxiao-poc.devops.aliyuncs.com:80/packages/02e873bb-f911-48ac-ad73-ec2298c5385d/nuget/repo-hzaul/index.json -n repo-hzaul -u "xxxxxxxxxxx" -p "xxxxxxxxx"
# 拉取 nuget 依赖包
dotnet add package Newtonsoft.Json --source http://yunxiao-poc.devops.aliyuncs.com:80/packages/02e873bb-f911-48ac-ad73-ec2298c5385d/nuget/repo-hzaul/index.json
# mubuild 构建
dotnet msbuild /p:Configuration=Debug /t:Publish
[1] Web deploy 4.0
https://download.visualstudio.microsoft.com/download/pr/e1828da1-907a-46fe-a3cf-f3b9ea1c485c/035860f3c0d2bab0458e634685648385/webdeploy_amd64_en-us.msi
[2] windows-hosting-bundle
[3] 官网
https://www.nuget.org/packages/Newtonsoft.Json
相关阅读:
https://help.aliyun.com/zh/yunxiao/user-guide/build-a-cluster
云效 Packages NuGet 制品仓库