简介:每个工具的诞生,都要有一个成长的过程,Serverless Devs 正在不断的成长。
从我作 Serverless 工具开始,就常常会遇到有人问这样一个问题:如何保证Serverless业务部署更新的一致性。浏览器
所谓的一致性在这里指的是:咱们经过工具在本地进行项目部署,此时再有人经过其余途径(例如控制台等),对项目进行过更新等操做,此时我再在本地进行项目部署,是否是会直接覆盖?安全
例如,当用户 A 在本地更新了业务,由于一些特殊状况,致使出现了一个线上异常状况“x”,此时用户 B 从新更新,将这个内容修复了,可是 B 没有及时同步给 A 这个事情,A 又更新了新的功能,直接覆盖了 B的内容,这个时候以前的异常 x 又出现了,若是此时在 A 更新的时候,能够感知到线上资源已经变更,那么这种事情就不会再次发生。less
目前基于 Serverless Devs 的阿里云函数计算组件,已经支持了线上“异动”的感知能力,包括了如下几个状况:函数
经过s init建立一个函数(选择Alibaba Cloud Serverless, 选择HTTP Function - Python3 Example):工具
此时咱们查看一下s.yaml:阿里云
该项目部署到线上以后的表现就是在cn-hangzhou区建立一个fc-deploy-service服务,以及http-trigger-function函数spa
此时,咱们肯定一下线上并无对应资源,因此咱们部署一下:资源
部署完成,很顺利:开发
打开浏览器,查看反馈给咱们的自定义地址:rem
此时,咱们能够在本地,更新一下这个函数代码:
保存部署:
完成以后,再查看线上资源:
整个过程,仍是比较贴近传统的基本流程,也没有触发线上异动,算是中规中矩的理想过程。
此时,咱们对线上资源进行变动,首先在控制台找到函数:
修改代码,并部署。
部署完成以后,咱们刷新一下刚才的地址:
能够看到已经更新。此时,咱们再从本地进行部署:
能够看到,系统已经感知到咱们的代码变化,此时,咱们选择yes,完成以后在查看线上资源:
此处须要额外说明的是,只要是函数计算的服务,函数,触发器发生变化,此处均可以进行感知,不论是配置仍是代码。
此时,咱们再进行最后的实验,咱们将本地项目删除,从新建设。而后执行部署,因为刚刚实验过的缘由,咱们已经在线上存在了这些资源,因此此时算是部署一个线上的资源。
此时能够看到,系统感知到这个资源本地没部署过,线上而且已经存在,因此此时须要肯定是否覆盖。
代码在其余场景被更新,须要咱们在当前获得感知,这个事情实际上是很是重要的,和代码的安全发布密不可少。而此时,经过Serverless Devs是能够作到的。
那么问题来了,若是我已经有了一个项目,我想集成到cd流程,我不想出现交互式操做,应该如何处理呢?
此时咱们提供一个--use-local参数,用来强行覆盖线上配置,经过这样的指令就能够实现无交互的,本地优先。
每个工具的诞生,都要有一个成长的过程,Serverless Devs正在不断的成长。期待更多更好的功能出现。
本文内容由阿里云实名注册用户自发贡献,版权归原做者全部,阿里云开发者社区不拥有其著做权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。若是您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将马上删除涉嫌侵权内容。