首页 > 系统相关 >基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发

基于云效 Windows 构建环境和 Nuget 制品仓库进行 .Net 应用开发

时间:2025-01-06 16:00:37浏览次数:1  
标签:Web IIS Windows Nuget 构建 流水线 云效 安装

作者:陆冬澄、周静

在现代软件研发体系中,.NET 平台由于其强大的功能、灵活性和丰富的开发工具,成为了构建 Windows 应用程序的热门选择。无论是桌面应用、Web 应用还是服务应用,.NET 提供了一系列强大的框架和工具,帮助开发者高效的创建高性能、可靠的应用程序。

本文将基于云效 Flow 流水线 Windows 构建环境和云效 Packages Nuget 制品仓库手把手教你如何开发并部署一个 .NET 应用,从环境搭建到实战应用发布的详细教程,帮助你掌握 .NET 开发的核心技能。

方案架构

本次实战教程中准备了两台机器,一台是用于构建的 Windows 构建机,需要我们添加到 Flow 流水线中;另一台是 Windows Server,作为 msdeploy 的对象,用于部署 .NET 应用服务。整体架构如下:

本方案中用到的示例代码工程如下:

环境准备

2.1 在 Windows Server 上安装和配置 Web deploy

2.1.1 开启 IIS 服务

IIS(Internet Information Server)服务类似于 Java 的 Tomcat,类似于一种容器,我们能将我们开发好的 Web 应用部署到 IIS 中。

按照以下流程开启 IIS

  1. 打开 Server Manager。

  2. 在 Manage 菜单下,选择 Add Roles and Features。

  1. 选择 Role-based or Feature-based Installation。

  1. 在 Server Selection 中选择合适的机器,此处可以选择默认的本地机器。

  2. 在 Server Roles 中选择 Webserver(IIS),并请务必同时勾选 IIS Management Scripts and Tools、Management Service 和 IIS Management Console 三个选项,否则安装 web deploy 时无法看到全部选项。

  1. Features 可以不用选择,因为 IIS 不需要额外的 Features。

  2. 在 IIS Role Service 中选择想要的设定,也可以保留默认设定。

  1. 点击 installation 进行安装,安装完成后点击 Close 关闭。

2.1.2 安装 Web Deploy

  1. 下载 Web deploy 4.0 [ 1]

  2. 运行下载的安装程序,请注意,请务必选择全部安装而非典型安装。如果我们选择自定义安装,可以看到以下页面,我们需要安装其中的所有组件。如果安装选项比起下图有缺少,说明之前安装 IIS 中少安装了 Management 相关组件,需要重新 Add Roles and Features。

3.(可选)通过打开“控制面板”>“系统和安全”>“管理工具”>“服务”来验证 Web 部署是否正确运行,然后确保:

  • “Web 部署代理服务”正在运行(旧版本中的服务名称不同)。
  • “Web 管理服务”正在运行。

如果某个代理服务未运行,请重新启动“Web 部署代理服务”。

如果 Web 部署代理服务根本不存在,请转到“控制面板”>“程序”>“卸载程序”,查找“Microsoft Web 部署 <版本>。选择“更改”安装,并确保对 Web 部署组件选择“将安装到本地硬盘”。完成更改安装步骤。

2.1.3 安装 ASP.NET Core windows-hosting-bundle

我们需要安装 AspNetCoreModuleV2 来确保服务的顺利启动。如果不安装该组件,那么服务启动的时候就会报 500.19 错误。下载 windows-hosting-bundle [ 2] , 并运行安装程序。

2.1.4 添加 Web 网站并开启 Web Deploy 发布功能**

  1. 打开 IIS 管理器,在左侧选择 Add Website。

  1. 在打开的 Website 窗口中,填写 Site name 和 Physical path,然后点击 ok。此处 Site name 填写为 DemoWin。

  1. 右键点击刚刚创建的 Web 网站,选择 Deploy > Config Web Deploy Publishing。

如果没有 Deploy 这一个选项,说明之前的 Web Deploy 没有正确安装和运行。

  1. 检查弹出页面中的各项参数,默认 URL for publishing seriver connection 端口为 8172,我们可以保留这个端口,也可以修改为其他端口。URL 中的 host name(8172 之前的部分)可以不用修改,在构建机中 deploy 时,我们将用 IP 地址代替 host name。

5.(可选)如果 Windows Server 位于阿里云 ECS,我们需要打开防火墙,允许外部对于 Server 的 8172、80端口的访问。操作路径:到 ECS 控制台 > 选择实例 > Windows Server 对应的实例 > 安全组 > 入方向手动添加,端口选择 80 和 8172, 授权对象选【0.0.0.0/0】。

2.2 配置 Windows 构建机

2.2.1 安装构建工具和发布工具

安装 Visual Studio、Web Deploy 和 Dotnet6.0。注意,本处安装 web deploy 时不需要打开 IIS,所以安装界面中会比 1.2 中少一些安装选项,但这不会影响我们配置构建机。

安装完成后,将以下路径添加到 Path 中:

  • 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 工程并发布

在配置流水线之前,我们可以先在本地尝试是否能成功构建并发布工程。1. 首先,我们 Clone Demo 工程代码:

git clone https://atomgit.com/oauth2_o72n54/FlowDemoWin
  1. 构建工程:
# mubuild 构建
dotnet msbuild /p:Configuration=Debug /t:Publish
# /p:Configuration=Debug 是构建出Debug版本
  1. 使用 msdeploy,将构建出来的内容发布到 Windows Server。
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
  1. 在浏览器输入 Windows Server 的公网 IP,我们可以看到:

这说明我们在本地成功构建并发布 Demo 工程。

基于云效 Windows 构建环境和 Nuget 制品仓库实现 .NET 应用持续交付

3.1 在 Flow 中添加 Windows 私有构建机

进入流水线管理页面后,点击最左下角的设置,然后点击构建集群管理 > 新建构建集群,输入构建集群基本信息后,点击确定创建私有构建集群后自动进入构建机的配置页面。

点击接入新节点 > 选择类型 Windows > 复制红框中 Runner 安装命令,粘贴到准备好的 Windows 构建机的 powershell 进行执行。

Runner 安装命令执行成功后,刷新私有构建集群页面,即可看到刚才接入的构建机器。

3.2 配置 Flow 流水线

进入 Flow 首页,新建流水线,按如下配置编辑流水线配置。

  1. 添加流水线源:我们可以选择企业公钥连接,然后将企业公钥粘贴至代码仓库的 SSH Key 处。
git@atomgit.com:oauth2_o72n54/FlowDemoWin.git

  1. 添加步骤:构建。选择刚才添加的 Windows 构建机,选择 Windows 节点,然后我们添加一个任务步骤-执行命令,然后写入:
dotnet msbuild /p:Configuration=Debug /t:Publish

  1. 添加步骤:部署。创建一个新的任务,选择类型为“执行命令”。然后依旧选择上一步中的 Windows 构建机,在执行命令中可以填入:
# 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

请注意,由于 runner 的 Path 可能和 Administrator 用户的 Path 有所不同,所以我们可以在这里详细写出 msdeploy 的路径 & 'C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy'。

  1. 保存并执行流水线,查看流水线运行进度。

  1. 流水线运行成功后,打开 Windows Server 中站点,我们可以看到应用部署成功。

3.3 使用 Packages Nuget 制品仓库进行依赖管理

将原来的代码源换为 https://atomgit.com/oauth2_o72n54/PackagesDemo ,相较于原来的代码,该仓库添加了 using Newtonsoft.Json;,此时,再运行流水线构建任务 msbuild 会失败,因为缺少依赖包。

我们可以用云效 packages,创建一个 NuGet 制品库来管理二方制品和三方制品。进入云效 Packages 首页,新建一个 NuGet 制品仓库。

访问官网 [ 3] ,下载依赖的 nuget 包到本地。

按照仓库指南,在本地进行配置:首先在本地设置仓库凭证,然后将刚才从官网下载的 nuget 包 push 到仓库中。此处 <SOURCE_NAME> 即为仓库地址的后缀名 repo-xxxxx。

推送成功后可以在仓库-包列表中查看包:

修改流水线代码源为(该仓库添加了 using Newtonsoft.Json):

git@atomgit.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

保存后运行流水线,流水线构建任务即会从 Packages NuGet 制品仓库拉取 Newtonsoft.Json 包,完成应用构建。

至此,本文即完成了一个 .NET 应用开发环境的搭建、CI/CD 流水线的配置、NuGet 依赖仓库管理等完整流程实践。

相关链接:

[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

https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/runtime-aspnetcore-6.0.20-windows-hosting-bundle-installer

[3] 官网

https://www.nuget.org/packages/Newtonsoft.Json

相关阅读:

云效 Flow 私有构建集群

https://help.aliyun.com/zh/yunxiao/user-guide/build-a-cluster

云效 Packages NuGet 制品仓库

https://help.aliyun.com/zh/yunxiao/user-guide/product-management-3

标签:Web,IIS,Windows,Nuget,构建,流水线,云效,安装
From: https://www.cnblogs.com/yyds114/p/18655572

相关文章

  • VirtualBox - Create a Ubuntu Virtual Machine on Windows
               ......
  • GetCPUID for lazarus(windows)
    GetCPUIDforlazarus(windows),兼容32/64位,直接上代码:unitGetCPUIDUnit;{$modeobjfpc}{$H+}{$ASMMODEintel}interfaceusesClasses,SysUtils;functionGetCPUID:string;implementationfunctionGetCPUID:string;var_ecx,_edx,_eaX,_ebx:LongWord;begin......
  • 在 Windows 中,配置单元文件(Registry Hive)是 Windows 操作系统注册表的核心组成部分。W
    在Windows中,配置单元文件(RegistryHive)是Windows操作系统注册表的核心组成部分。Windows注册表是一个存储系统配置和应用程序设置的数据库,而配置单元(Hive)是这些数据库的一个逻辑分区。每个Hive存储一组与系统或用户相关的数据,结构上可以视为一个分区或区域。什么是配置单......
  • auditpol 的全称是 Audit Policy。它是 Windows 中的一个命令行工具,允许管理员管理和
    auditpol的全称是AuditPolicy。它是Windows中的一个命令行工具,允许管理员管理和配置Windows系统上的安全审计策略。该工具使您能够指定应该审计哪些事件,例如登录尝试、对象访问或系统配置更改等。auditpol 的主要功能:查看和配置特定类别及子类别的审计策略。启用或禁......
  • ROBOCOPY Windows文件拷贝神器
    ROBOCOPY,即RobustFileCopy,是Windows操作系统中一个命令行实用程序,用于文件和目录的复制。它最初是作为XCOPY的替代品开发的,提供了更多的功能和更好的可靠性。ROBOCOPY能够处理大规模的数据复制任务,并且在遇到错误时具备重试机制,可以跳过不可用的文件,继续复制其余的文件,这使得它......
  • 使用Windows批处理命令批量上传jar到Nexus(maven私服)中
    这里就不介绍nexus的搭建了;网上很多都是.sh脚本,linux比较合适,当然用git也可以运行;但是.bat文件肯定是所有windows系统都是可以执行的;所以这里介绍一下用windows的批处理命令来编写;首先,你得先确定的仓库状态是处于Allowredeploy状态;新建一个文件mavenimport.bat,用记事本打......
  • IDA Pro 9.0 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
    IDAPro9.0(macOS,Linux,Windows)-强大的反汇编程序、反编译器和多功能调试器Apowerfuldisassembler,decompilerandaversatiledebugger.Inonetool.请访问原文链接:https://sysin.org/blog/ida-pro/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgIDA......
  • Windows下的GDAL环境配置
    Windows下的GDAL环境配置在Windows下GDAL环境的配置方式有很多种,我尝试了很多不同的配置方式,包括Anaconda、GISInternals、QGIS、OSGeo4W等,我这里只说最简单的一种配置方式,基于OSGeo4W的配置方式。安装从OSGeo4W官网下载最新的osgeo4w-setup.exe安装包。按照下图步骤安装:......
  • 《Windows 32 位汇编语言程序设计教程》第 01 章 背景知识
    1.1Win32的软硬件平台(1)1.1.1硬件基础CPU架构与32位特性:介绍32位CPU的基本架构,包括寄存器的组织、寻址方式以及与16位CPU的区别。例如,32位CPU拥有更大的通用寄存器,能够处理更复杂的指令和更大的数据量。内存管理:阐述32位系统下内存管理的基本原理,如分......
  • Windows环境下反弹shell各类姿势
    在渗透测试过程中我们有时候需要通过Windows平台来反弹shell到我们的VPS主机以及CS端,那么这个过程中我们就需要借助Windows平台内置的可执行程序来执行命令,其中首选的就是powershell,本篇文章我们主要介绍如何通过Windows平台中如何通过powershell来反弹shell操作。powercat反弹sh......