Windows环境构建与部署

更新时间:
复制 MD 格式

通过云效流水线Flow,自动化实现Windows环境下的Web服务构建与部署。

前提条件

请确保已准备了2台阿里云ECS实例或者非阿里云服务器,在本示例中分别将2台服务器称为A服务器和B服务器。

  • A服务器,用于Web服务IIS环境主机。

  • B服务器,用于版本构建环境主机。

步骤一:安装IIS(Internet Information Server)Web服务组件

  1. A服务器上,打开Server Manager服务器管理器,选择顶部菜单栏Manage,单击Add Roles and Features,在弹出的安装步骤配置向导中,开始步骤操作。

  2. 选择安装类型Role-based or Feature-based Installation

  3. 服务器选择Server Selection:选择默认的本地机器,根据需求选择合适的机器。

  4. 服务器角色Server Roles:请单击勾选Web Server(IIS),并同时勾选以下三个选项。

    • IIS Management Scripts and Tools

    • Management Service

    • IIS Management Console

  5. 功能Features:此项可以不用选择,因为IIS不需要额外的Features。

  6. Role Services:根据需求选择此项的设定,也可以保留默认设定。在 Role Services 步骤中,展开 Web Server 节点,确认 Common HTTP Features 下的 Default Document、Directory Browsing、HTTP Errors、Static Content、HTTP Redirection、WebDAV Publishing 以及 Health and Diagnostics 下的 HTTP Logging、Custom Logging、Logging Tools、ODBC Logging、Request Monitor 均已勾选。

  7. 进入Confirmation确认步骤,单击按钮Install,安装完成后点击Close关闭。

步骤二:安装IIS插件Web Deploy

  1. A服务器上,安装Web Deploy,请务必选择全部安装而非典型安装。

    说明
    • 下载插件Web Deploy 4.0

    • 什么是 Web Deploy?Web Deploy 是一个可扩展的客户端-服务器工具,用于将内容和配置同步到 IIS,比如开发人员将已编译的 Web 应用程序(ASP .Net、PHP 等)从开发人员工具(Visual Studio、WebMatrix 等)同步(又称为“发布”)到 IIS。

  2. 如果选择的自定义安装,需要安装下方截图中的所有组件。如果安装的选项比截图的有缺少,说明之前安装IIS中少安装了Management相关组件,需要重新安装Web服务组件Add Roles and Features在 Web Deploy 4.0 安装向导的 Custom Setup 页面中,将 Web Deployment Framework 下的所有子功能(IIS Manager UI ModuleIIS Deployment HandlerRemote Agent Service)均选择为安装到本地硬盘。

  3. (可选)通过打开验证 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

  1. A服务器上,开始菜单中,选择Windows管理工具,单击启动Internet Information Services(IIS)管理器,或者运行命令inetmgr.exe

  2. 在左侧菜单,右键单击Sites网站,选择Add Website添加网站。

  3. Website配置面板中,根据需求填写Site name网站名称和Physical path网站路径,单击OK

  4. 右键单击已创建的Web网站,选择

    说明

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

  5. 检查弹出面板中的各项参数,默认URL for the publishing server connection端口为8172,可以保留这个端口,也可以设置为其它端口。URL中的host name(8172端口冒号前部分)可以不用修改,在构建机中部署Deploy时,将用IP地址代替host name。在 Configure Web Deploy Publishing 对话框中,选择发布用户(如 Administrator),根据需求填写 SQL Server 或 MySQL 连接串,确认发布服务器 URL(格式为 https://主机名:8172/msdeploy.axd)及发布设置文件保存路径,然后单击 Setup 完成配置。

  6. (可选)如果是阿里云ECS,我们需要打开防火墙,允许外部对于Server的 8172、80端口的访问。

    说明

    选择目标实例的安全组,根据需求添加规则,添加入方向端口808172,授权对象源设置特定IP地址段或者全放开。

步骤五:配置Windows构建机

  1. B服务器上,安装环境依赖工具,根据需求选择版本安装。

    Visual Studio 2022
    webdeploy_amd64_zh-CN.msi
    dotnet-sdk-6.0.202-win-x64.exe
  2. 安装完成后,配置环境变量,将以下路径添加到Path系统变量或者用户变量。

    C:\Windows\Microsoft.NET\Framework64\v4.0.30319
    C:\Program Files\IIS\Microsoft Web Deploy V3
    C:\Program Files\dotnet
    说明

    在安装dotnet时已经添加环境变量,如果没有找到dotnet,可以手动添加。

  3. 环境变量配置完成后,打开Windows PowerShell命令窗口,测试命令msbuildmsdeploydotnet是否执行成功,以确保成功安装和配置环境变量。

步骤六:创建流水线Flow任务

  1. Flow中添加私有Windows构建机,具体操作请参阅构建集群

  2. 登录流水线Flow服务控制台,在控制台界面新建流水线,根据需求选择合适的流水线模板,单击创建按钮。

  3. 添加流水线源任务,在右侧滑出面板中,根据需求选择合适代码源,完成代码源流水线任务配置。

  4. 配置构建任务,在下个阶段区域,添加执行命令任务类型,在面板中完成配置参数。

    1. 任务名称:自定义任务名称。

    2. 构建集群:在私有构建集群中,选择私有目标Windows构建主机。

    3. 指定构建节点:选择构建环境Windows/amd64

    4. 构建环境:单击选中默认VM环境。

  5. 在任务步骤中,配置执行命令参数。

    1. 步骤名称:自定义名称。

    2. 执行命令:填写构建命令。

      dotnet msbuild  /p:Configuration=Debug /t:Publish
    3. 是否指定运行Shell:单击勾选,选择Shell类型powershell

  6. 配置部署任务,在下个阶段区域,添加执行命令任务类型,在面板中完成配置参数,请参考上述步骤4的参数配置。

  7. 在任务步骤中,配置执行命令参数。

    1. 步骤名称:自定义名称。

    2. 执行命令:填写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服务器公网地址、网站名称、服务器登录用户名和密码。

    3. 是否指定运行Shell:单击勾选,选择Shell类型powershell

  8. 保存并执行流水线,完成构建并运行成功的流水线任务后,在浏览器中访问IIS网站资源。完成流水线配置后,运行流水线任务。运行成功时,流水线详情页将显示各阶段执行结果:流水线源(代码仓库及分支信息)、构建步骤和部署步骤均显示绿色对勾,表示运行成功。

步骤七:添加Packages(可选)

  1. 可以使用云效Packages创建一个NuGet制品库,以管理二方制品和三方制品,在代码源中添加以下依赖库,此时msbuild不能成功运行,因为缺少依赖包。

    using Newtonsoft.Json;
  2. 请访问官方网站,下载NuGet依赖包Newtonsoft.Json。

  3. 打开云效 Packages,创建一个新的 NuGet 制品仓库。在新建制品仓库表单中,填写仓库名称(如win-test),仓库模式选择Hosted 存储模式(仅支持存储制品),公开性选择私有仓库,然后单击创建

  4. 根据仓库指南,在本地进行配置,首先在本地设置仓库凭证,然后将Newtonsoft.Json依赖包push到仓库中。仓库创建完成后,进入仓库指南的 dotnet 配置 页面,可查看设置仓库凭证、推送和拉取三类命令模板。其中推送命令格式为 dotnet nuget push --source <SOURCE_NAME> <PACKAGE_NAME>

  5. 推送成功后,可以在 packages 中确认已添加该包。

  6. 根据仓库指南中的第三条指令,在B服务器的本地构建环境中进行该软件包的添加测试。然后执行构建指令dotnet msbuild成功运行。

  7. 在流水线中,也可以调用相关的包,需要将流水线源更换为(该仓库已添加using Newtonsoft.Json):

    gi*@atomgit.com:oauth2_xxxxxx/PackagesDemo.git
  8. 将流水线构建任务进行扩展。

    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
  9. 保存后运行,流水线就可以正常调用packages。