使用Azure DevOps实现文件形式发布.NET Core应用到IIS
1. 前言
目前, 关于.NET Core应用使用Azure DevOps进行CI/CD的资料大都是使用Docker形式发布的, 作者目前遇到的情况是客户只能支持文件形式发布, 所以进行了一定的探索。
2. CI
CI的最终目的为了生成可发布的包,一般情况下需要执行:
- 编译项目
- 运行单元测试
- 发布项目
- 将发布后生成的文件上传到Azure Pipelines 或 某个文件共享位置
最简单的情况下, 可以跳过1和2
azure-pipelines.yml 文件如下:
trigger:
- master
pool:
name: 'DeployToIIS'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.SourcesDirectory)\[项目名称]\bin\Debug\[.NET版本]'
ArtifactName: '[自定义名称]'
publishLocation: 'Container'
3. CD
CD的目的是发布文件到服务器,所以一般需要执行:
- 将文件上传到服务器的某个目录
- 停止IIS下.NET Core应用对应的程序池
- 覆盖.NET Core应用文件
- 启动IIS下.NET Core应用对应的程序池
因为停止/启动程序池需要远程执行命令, 所以建议在Windows上启用SSH服务, 上传文件和执行命令都使用SSH实现。Windows系统开启SSh Server服务