一,引言

前天我们将到使用Azure的 Pass 服务 “Web App” 去部署我们的.NET Core Web项目,也同时有介绍到如何在VS中配置登陆中国区的Azure账号,今天接着讲,我们部署完我们的Web服务,进行完测试后,肯定是要发布到生产环境,但是我们不可能再去创建一个相同的Web App,配置上生产环境的域名,配置上生产环境的数据库连接字符串等等,而 Azure 的 Web App是可以通过自己的一个叫 “Deployment slots(部署槽)”的功能进行切换。我们来看一下微软给出的使用部署槽的优点,以下是微软的官方文档提到的优势

将应用程序部署到非生产槽具有以下优点:

  • 可以在分阶段部署槽中验证应用更改,并将其与生产槽交换。
  • 首先将应用部署到槽,然后将其交换到生产,这确保槽的所有实例都已准备好,然后交换到生产。 部署应用时,这样可避免停机。 流量重定向是无缝的,且不会因交换操作而删除任何请求。 当不需要预交换验证时,可以通过配置自动交换来自动化这整个工作流。
  • 交换后,具有以前分阶段应用的槽现在具有以前的生产应用。 如果交换到生产槽的更改与预期不同,可以立即执行同一交换来收回“上一已知的良好站点”。

下面,我们正式开始今天的分享。

----------我是分割线----------

Azure Web App 部署系列:

1,Azure Web App(一)发布你的Net Core Web 项目

二,正文

1,升级应用服务计划

  定价层为 “Free” 的Web App是无法使用 “Deployment slots” 的功能的,我们需要进行将定价层升级到 “Standard” 或者 “premium”

下图中,我们可以看到 Web App 的 “Deployment slots(部署槽)” 都是有自己的主机名的实力应用,你的应用和环境配置可以在两个部署槽位进行交换。

点击 “Upgarte”,选择 “Production”=>"S1",可以看到 "Staging slots" 过渡槽这个功能

点击 “Apply”,升级后,我们继续跳转到 “CnBateWeb” 的 Web App,左侧菜单选择 “Deployment”=>"Deployment slots",目前只有一个默认槽位,并且状态是 “Running” 的

点击 “Add Slot”,

Name 输入 “IntegrationTesting”,克隆设置选择 “cnbateblogweb”,点击 “Apply”

回到的我们的代码中,我们尝试去修改 Index 页面,在 Welcome 的后面追加 “IntegrationTesting”,我们可以把它理解成,我们的 web项目现在新增了一个功能,同时我们需要进行集成测试,测试通过后,需要发布到生产环境中去。

假如我们在本地开发完成后,也进行了简单的测试,现在需要发布到云端,需要QA的集成测试,我们选择刚刚创建好的 “IntegrationTesting”的槽位。进行发布。

回到 Azure Portal 中,我们创建的 "CnBateBloaWeb" 的 Web App,点击部署槽位刚刚创建的 “cnbateblogweb-IntegrationTesting” 的超链进行跳转

选择左侧菜单 "Overview",,点击图中用红色方框圈起来的“Browse”,进行浏览,测试。

bingo,我们可以清楚的看到,"IntegrationTesting" 是我们刚刚为了集成测试,添加的一个标识,作为我们demo项目的 “假功能”

假如我们新发布的项目经过QA的集成测试通过后,我们需要将这一整套的代码发布到我们的生存环境中去,这个时候,我们还像上一篇将的那样在VS中发布选择之前创建的名字叫 “CnBateBlogWeb” 的 Web App? No,No,No,此时,我们已经将开发好的新功能的代码发布到新创建的 “cnbateblogweb-IntegrationTesting” 的部署槽里了,我们只需要将部署槽里的两个槽位进行交换即可快速完成测试环境到生产环境的代码的切换,接下来,我们进行交换 测试/生产 环境的部署槽。

回到 “Deployment Slot” 页面,点击 “Sswap” 进行交互。

源 选择我们集成环境的 “cnbateblogweb-IntegrationTesting”,目标 选择  “cnbateblogweb”,点击 “Swap”.

在 Azure Portal 上这个过程需要等待差不多20多秒,但是其实,它们两个槽位以及进行了无停机的交换了,我们进行拿着生产环境的域名进行访问,可以看到,我们成功的将刚刚加的新功能发布到生产环境上了。

bingo,我们进行的分析到此也就完了。

三,总结

今天我们演示了一下,如何在Web App中创建 “Deployment Slot”进行快速无停机部署新功能代码,也使用VS进行发布到创建的Web App中创建的新的部署槽位中,同时也引出了另外一个问题,环境变量怎么切换,切换槽位后,生产环境的数据库连接字符串怎么办。下一篇文章,我会继续 部署槽,进行配置部署槽设置,同时在交换槽位的时候,测试环境/生产环境都能够准确的连接到对于的数据库

代码继续暂时不上传了,因为没有设计到其他设置,只是简单的修改了主页,下一篇讲解 配置槽设置 的时候再上传代码

作者:Allen

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

作者:Allen 版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure Web App (二)使用部署槽切换部署环境的更多相关文章

  1. 【Azure 应用服务】Azure Web App的服务(基于Windows 操作系统部署)在被安全漏洞扫描时发现了TCP timestamps漏洞

    问题背景 什么是TCP timestamps(TCP 时间戳)? The remote host implements TCP Timestamps, as defined by RFC1323 (h ...

  2. Azure Web App (三)切换你的Net Core Web 项目的数据库连接字符串

    一,引言 上一篇文章讲到今天我们演示了一下,如何在Web App中创建 “Deployment Slot”进行快速无停机部署新功能代码,也使用VS进行发布到创建的Web App中创建的新的部署槽位中, ...

  3. Azure Web App (一)发布你的Net Core Web 项目

    一,引言 今天我们看一下Azure上的一个服务-----Web 应用,我们都知道云计算的三大模式:Iaas(基础设施即服务),Paas(平台即服务),Saas(软件即服务). Iass,其实就是虚拟主 ...

  4. 如何用Azure Web App Services接入微信公众号

    注:本文提到的代码示例下载地址>如何用Azure Web App Services接入微信公众号 如何用Azure Web App Services接入微信公众号 简介 此示例演示如何创建Azu ...

  5. 远程调试 Azure Web App

    当我们将 Web App 部署在 Azure 上时,如果能够实现远程调试,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.易用著称,当然可以实现基于 Azure 应 ...

  6. Windows Azure HandBook (7) 基于Azure Web App的企业官网改造

    <Windows Azure Platform 系列文章目录> 1.用户场景: C公司是全球大型跨国连锁餐厅,在世界上大约拥有3万间分店.其IT系统主要部署其海外数据中心,或者租用其他ID ...

  7. Windows Azure Web Site (18) Azure Web App设置MIME

    <Windows Azure Platform 系列文章目录> 在笔者之前的文章中,介绍了我们在使用Azure Web App,可以把静态资源保存到Azure Storage中: Wind ...

  8. VS 远程调试 Azure Web App

    如果能够远程调试部署在 Azure 上的 Web App,将会极大的提高我们修复 bug 的效率.Visual Studio 一贯以功能强大.好用著称,当然可以通吃基于 Azure 应用的创建.发布和 ...

  9. FTP方式部署Azure Web App

    创建部署凭据 在仪表盘中创建或重置部署凭据,在凭据中设置用户名和密码. 通过FTP方式打开Web根目录 在本地资源管理器中打开FTP地址(例如:ftp://cnws-prod-sha-001.ftp. ...

随机推荐

  1. Jmeter基础004----增加参数化

    一.参数化概述 1.参数化概念 参数化就是动态的获取并设置数据,当执行批量操作时,如批量插入或批量删除,之前每执行完一次就需要修改一次,效率太低,参数化可以代替人工获取并设置数据,安全且高效! 2.J ...

  2. C#数据结构与算法系列(六):链表——双链表(Double-LinkedList)

    1.对比单向链表 单向链表查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除 对于单向链表的删除,我们首先要找到单向链表待删除节点的 ...

  3. 恕我直言你可能真的不会java第2篇:Java Stream API?

    一.什么是Java Stream API? Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合 ...

  4. Windows程序设计(2) - API-02 文件系统

    一.磁盘分区的基本概念 1.磁盘分区(Patitions): 分区就是物理存储设备分割成多个不同的逻辑上的存储设备.分区从实质上说就是对硬盘的一种格式化.当我们创建分区时,就已经设置好了硬盘的各项物理 ...

  5. rust 代码生成选项

    Available codegen options: -C ar=val -- this option is deprecated and does nothing -C linker=val -- ...

  6. 用python玩推理游戏还能掌握基础知识点,有趣又充实,你不试试吗?

    可能更多的人依然还在苦苦的学python各种知识点,但其实同样很多人,玩着游戏就把python学会了.     用python玩推理游戏,是这份python教程中的12个游戏的其中之一. 有关这份Py ...

  7. Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误

    上一篇随笔中已经说了简单的Jar是如何封装的,但是我的需求是根据TIPTOP的查询条件产生XML文件并上传到FTP主机中,那么就要涉及到XML生成的方法和FTP上传的方法 所以在Eclipse写的时候 ...

  8. vscode启动vue项目出错,给了管理员权限没用

    今天在安装vue环境测试项目的时候, 发现vscode调用终端异常,语句无法运行,百度上给的解决方法是给管理员权限 给了以后发现没用,怎么试都没用,然后想到了,重启大法,然后问题就完美解决了

  9. leetcode 力扣 两数之和

    class Solution: def addTwoNumbers(self, l1, l2): n1 = [] n2 = [] nl = [] while l1.next and l2.next: ...

  10. 如何修改linux下tomcat指定的jdk路径

    一般情况下,一台服务器只跑一个项目,只需根据所需项目,将linux默认的jdk环境配置好即可.某些时候一台服务器上会跑多个项目,而且各个项目需要的JDK版本各不相同,或者为了使业务独立开来,需要指定T ...