You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Azure DevOps Pipeline通过FTP部署非Azure站点的App_Offline YAML方案

实现方案

本方案适配仅拥有FTP权限的非Azure站点部署场景,通过Azure DevOps内置的FTP任务分三步完成自动化操作,全程无需手动介入:

  • 先上传App_Offline.html到站点根目录,触发ASP.NET Core自动下线释放文件锁
  • 等待几秒确保站点进程完全停止后,上传完整的站点部署文件
  • 部署完成后删除App_Offline.html,站点自动恢复启动

前置准备

  1. 将自定义的App_Offline.html存放到代码仓库根目录
  2. 在流水线的变量配置中添加3个机密变量:ftpServer(FTP服务地址,如ftp://yourdomain.com)、ftpUsername(FTP登录账号)、ftpPassword(FTP登录密码)

完整YAML示例

trigger:
- main # 按你的实际触发分支修改

pool:
  vmImage: 'windows-latest' # 使用Linux镜像也支持内置FTP任务

variables:
  # 站点根目录的FTP路径,按你的实际配置修改
  ftpRootPath: '/'
  # 本地构建输出的站点文件路径,按你的实际配置修改
  localPublishPath: '$(Build.ArtifactStagingDirectory)/publish'

steps:
# 第一步:构建生成站点部署文件,可根据你的实际构建逻辑调整
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration Release --output $(localPublishPath)'
    zipAfterPublish: false

# 第二步:上传App_Offline.html到站点根目录
- task: FtpUpload@2
  inputs:
    credentialsOption: 'inputs'
    serverUrl: '$(ftpServer)'
    username: '$(ftpUsername)'
    password: '$(ftpPassword)'
    rootDirectory: '.'
    filePatterns: 'App_Offline.html'
    remoteDirectory: '$(ftpRootPath)'
    clean: false
    overwrite: true
    preservePaths: false

# 第三步:等待5秒,确保ASP.NET Core进程完全停止释放文件锁
- task: Delay@1
  inputs:
    delayForMinutes: '0'
    delayForSeconds: '5'

# 第四步:上传完整的站点部署文件
- task: FtpUpload@2
  inputs:
    credentialsOption: 'inputs'
    serverUrl: '$(ftpServer)'
    username: '$(ftpUsername)'
    password: '$(ftpPassword)'
    rootDirectory: '$(localPublishPath)'
    filePatterns: '**'
    remoteDirectory: '$(ftpRootPath)'
    clean: false # 如需先清空目标目录再上传可改为true,操作前请确认不会误删站点其他文件
    overwrite: true
    preservePaths: true

# 第五步:删除站点根目录的App_Offline.html,恢复站点访问
- task: FtpDelete@2
  inputs:
    credentialsOption: 'inputs'
    serverUrl: '$(ftpServer)'
    username: '$(ftpUsername)'
    password: '$(ftpPassword)'
    rootDirectory: '$(ftpRootPath)'
    filePatterns: 'App_Offline.html'

注意事项

  • 若部署过程中出现异常,可在流水线中添加失败触发的清理任务,执行删除App_Offline.html的操作,避免站点持续处于下线状态
  • 如果你的FTP站点需要被动模式连接,可以在FTP任务的高级选项中开启被动模式
  • 机密变量配置后不会在流水线日志中明文显示,可避免账号密码泄露

内容的提问来源于stack exchange,提问作者philw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 20:27:02