如何编写GitLab yml文件实现.NET Core代码自动发布部署到AWS Windows实例IIS
.NET Core项目GitLab CI自动部署到AWS Windows IIS配置方案
前置准备
- 部署GitLab Runner:安装在可访问AWS Windows实例的Windows环境中,Runner标签配置为
aws-windows-iis,提前安装对应版本的.NET Core SDK - AWS Windows实例配置:开启WinRM服务(默认HTTP端口5985/HTTPS端口5986),安全组放行对应端口,提前在IIS中创建好目标站点、应用池,确认站点物理路径已给
IIS_IUSRS组分配读写权限 - GitLab变量配置:在项目「设置- CI/CD -变量」中添加以下受保护变量,避免敏感信息硬编码:
AWS_WINRM_HOST:AWS实例公网/内网IPAWS_WINRM_USER:WinRM登录用户名AWS_WINRM_PWD:WinRM登录密码IIS_SITE_NAME:目标IIS站点名称IIS_APP_POOL:目标IIS应用池名称IIS_PHYSICAL_PATH:IIS站点物理路径,示例:C:\inetpub\wwwroot\myapp
.gitlab-ci.yml完整配置
stages: - build - deploy # 构建发布阶段 build_job: stage: build tags: - aws-windows-iis script: - dotnet restore - dotnet publish -c Release -o ./publish artifacts: paths: - ./publish/ expire_in: 1d only: - main # 按需修改为触发部署的分支名 # 部署到IIS阶段 deploy_job: stage: deploy tags: - aws-windows-iis dependencies: - build_job script: # 构建WinRM连接凭证 - $pwd = ConvertTo-SecureString $env:AWS_WINRM_PWD -AsPlainText -Force - $credential = New-Object System.Management.Automation.PSCredential ($env:AWS_WINRM_USER, $pwd) - $session = New-PSSession -ComputerName $env:AWS_WINRM_HOST -Credential $credential -Port 5985 # 停止IIS站点和应用池避免文件占用 - Invoke-Command -Session $session -ScriptBlock { Import-Module WebAdministration; Stop-WebSite -Name $using:IIS_SITE_NAME; Stop-WebAppPool -Name $using:IIS_APP_POOL; } # 复制发布文件到IIS站点路径 - Copy-Item -Path ./publish/* -Destination $env:IIS_PHYSICAL_PATH -Recurse -Force -ToSession $session # 重启站点和应用池 - Invoke-Command -Session $session -ScriptBlock { Start-WebAppPool -Name $using:IIS_APP_POOL; Start-WebSite -Name $using:IIS_SITE_NAME; } # 销毁WinRM会话 - Remove-PSSession -Session $session only: - main when: on_success # 构建成功后自动触发,如需手动确认可改为manual
关键注意事项
- 如果WinRM使用HTTPS加密连接,需要将
New-PSSession中的端口改为5986,同时添加-UseSSL参数 - 若项目为独立部署模式,可在
dotnet publish命令中添加运行时参数,示例:-r win-x64 --self-contained true - 首次配置前可手动在Runner机器上执行脚本中的PowerShell命令,验证WinRM连接、文件复制、IIS操作逻辑正常后再接入CI流程
- 确保Runner的PowerShell执行策略已设置为
RemoteSigned,避免脚本被系统拦截 - 如果需要部署到多环境,可扩展stages,添加test、prod等不同部署阶段,对应不同的变量配置即可
内容的提问来源于stack exchange,提问作者Ravi Patel
相关产品推荐
相关产品推荐

