能否使用VSTS Continuous Delivery部署至非Azure Web服务器?
当然可以!别被“VSTS”和“Azure”的绑定印象限制住——VSTS(现在官方叫Azure DevOps Server,但大伙还是习惯喊VSTS)的持续交付能力完全不局限于Azure生态,有好几种实用的方法能帮你把应用部署到第三方Web服务器上:
自定义脚本任务搞定一切
这是最灵活的方案,不管你的目标服务器是Windows还是Linux,都能通过PowerShell(Windows)或Bash(Linux)脚本实现部署。比如针对Windows IIS服务器,你可以写脚本用WinRM协议连接到目标机器,把构建好的应用包复制过去,再调用WebAdministration模块更新站点配置、重启应用池;如果是Linux的Apache/Nginx服务器,用SSH脚本上传文件、修改配置、重启服务就行。只要你能手动完成的部署步骤,几乎都能写成脚本放进VSTS流水线里。借助第三方部署扩展
Azure DevOps Marketplace里有大量社区或官方维护的扩展,专门针对各种非Azure服务器的部署场景。比如支持FTP/SFTP上传的扩展、一键部署IIS站点的工具、针对Apache的配置更新插件等等。直接在流水线的任务库中搜索对应的扩展添加就行,省去自己写复杂脚本的麻烦。用Deployment Groups管理目标服务器
如果你的目标服务器是长期运行的(不是临时实例),可以把它们加入VSTS的Deployment Groups。只需要在目标服务器上安装一个Deployment Agent,就能把服务器纳入VSTS的管理范围。之后在流水线里就能直接选择这些服务器作为部署目标,使用内置的文件复制、IIS部署等任务,操作起来和部署到Azure虚拟机一样方便。容器化部署适配任意服务器
要是你的应用已经容器化了,那部署到非Azure服务器就更简单了:用VSTS的Docker任务构建镜像,推送到私有镜像仓库(比如Harbor、Docker Hub私有库),然后在目标服务器上通过脚本拉取镜像、启动容器就行——不管目标是自建K8s集群、普通Docker主机,甚至是云厂商的非Azure服务器都能适配。
最后提醒下:部署前要确保VSTS能和目标服务器正常连通(比如开放WinRM/SSH端口,或者通过代理打通网络),同时脚本或扩展要有足够的权限在目标服务器上执行操作(比如文件写入、服务重启的权限)。
内容的提问来源于stack exchange,提问作者wingyip

