Salesforce 生命周期管理(一)应用生命周期浅谈
本篇参考:
https://help.salesforce.com/s/articleView?id=sf.deploy_sandboxes_intro.htm&type=5
https://guides.github.com/introduction/flow/
https://developer.salesforce.com/docs/atlas.en-us.224.0.sfdx_dev.meta/sfdx_dev
一. Application Lifecycle Management(ALM)
我们都知道,聊起来salesforce的实施,想到的前三个词中大概率就会包括敏捷这个词,当然每个人站在不同的位置对这个词就有不同的含义。对于开发人员来说,敏捷可能意味着2、3周一次上线。对于项目管理来说,可能需要根据客户的需求去分析去根据优先级以及resource情况排sprint计划等等。敏捷不代表没有流程性,相反敏捷对于团队成员的整体能力以及流程要求更高。Salesforce提供了一套应用的生命周期的管理流程以及针对这种管理模型对应的三种开发模式。我们可以通过下图查看到一个应用的生命周期流程涉及到的阶段,各阶段含义的相关介绍如下。
1. 计划发布阶段:一个项目启动以后,不是开发直接干就完事了,而是应该先由一个计划来开始我们的自定制或者开发的项目。收集需求并进行分析,让产品经理(或同等级别的人员)创建设计规范,并与开发团队共享这些规范以供实施。随着项目在ALM周期中的进展,确定团队需要的各种开发和测试环境。
2. 开发阶段:在开发的sandbox上按照设计文档进行程序的开发工作。使用声明性工具(Process Builder、Custom Object Wizard和有UI界面的其他的功能)和编程工具(develop console、sublime 或 visual code studio等)的适当组合在Lightning平台上开发。
3. 测试阶段:在我们和其他人的工作集成以前,需要先检查一下我们的更改内容是否按照预期来工作。在开发步骤中使用的相同类型的环境中进行测试,但要将开发环境和集成测试环境分开。通过下图可以看到,当我们在测试阶段出现一些问题情况下,我们应该针对开发阶段以及测试阶段有一个可以自动测试的持续的集成过程(CI)。
4. 构建发布阶段:将当前release在开发阶段创建或修改的所有资产聚合到一个用来部署到生产环境中的定制包中。从这一点开始,关注你将要发布的team所有人的内容,而不是个人的贡献。
5. 测试发布阶段:测试实际要部署的内容,但要在尽可能模拟生产的环境中安全地进行测试,使用实际数量的代表性生产数据。将测试环境与所有外部系统连接起来,以模拟生产系统的集成点。在此步骤中运行完整的回归和最终性能测试。与一小群经验丰富的测试人员一起测试发行版(一种称为用户验收测试的技术UAT)。
6. 发布阶段:完成测试并达到质量基准后,可以将定制部署到生产环境中。培训员工和合作伙伴,让他们了解变化。如果某个版本对用户有重大影响,请为培训用户创建一个具有真实数据的单独环境。
当然,上述说的内容是一个比较common的,不同的场景可能大步骤还是这样,执行起来好多就可以忽略。比如一个项目特别小,就是一个CR,做一做 report ,修复修复bug这种打补丁相关的项目,我们就可以省略了发布阶段的用户培训这个步骤。我们的一个发布版本可以根据改动大小分成三种不同的种类:
- Patch:这种打补丁的发布的种类通常用于Bug修复和简单更改。简单的更改包括报告、仪表板、列表视图和电子邮件模板。
- Minor(较小变更):影响有限的更改,例如影响单个业务流程的新workflow或者trigger。这些版本通常需要测试,但只需要有限的培训和更改管理。通常,一个团队会在几周内为一个小版本交付更改。
- Major(较大的变更):具有重大影响的更改,包括具有一个或多个依赖项的更改。因为这些版本会极大地影响用户体验和数据质量,所以它们需要彻底的测试、培训和仔细的更改管理。主要版本通常每季度发布一次(Salesforce每年发布三次)。
二. 开发模式浅谈
Salesforce 提供了三种开发模式或者开发模型。Change Set 开发模型 、 Org 开发模型 以及Package 开发模型。当然,我想大部分人对第一种开发模型很熟悉,事实上,好多的国内项目现在还在用 change set进行部署管理。那么这三种模型有啥使用场景以及优缺点呢?这里进行一个简单的描述,后续看一下是否有必要每个进行单独的讲解。
1. Change Set Development Model
这种应该是大部分人都比较熟悉的一种模式。我们在项目启动到项目上线(上线后维护),通常的阶段会是:
Dev: 项目的开发阶段,进行代码的开发等。
SIT: 项目的系统集成测试,进行多端系统的集成的测试。
UAT: 用户接受测试,实际的客户进行功能测试。
PROD: UAT客户验收以后,实际生产环境。
HOTFIX:生产环境出现紧急问题的补丁的sandbox。
我们实际做项目时,UAT以前如果有代码质量review等操作,基本上要在上UAT以前进行此操作。因为不同的sandbox需要履行的事情不同,所以对sandbox的类型的使用也各不相同。PROD没有说的必要,肯定用生产环境,不涉及到 sandbox的选用。 FULL环境理论上需要和生产环境的配置以及数据等等相同,进行实际生产环境的mock以及进行大数据量的性能测试等,所以UAT环境需要使用 FULL SANDBOX。SIT 需要和各个外部环境进行集成测试,在保证数据量,功能等情况,以及可能需要带入一些实际生产数据等考虑,通常SIT会使用 Partial Copy Sandbox,使用时需要考虑他的刷新的周期以及存储量等是否可以满足使用。HOTFIX通常都是项目 Release以后部署完生产环境以后要尽快的弄成和生产环境配置相同,所以可以使用 Developer Pro Sandbox,好处是刷新的周期是1天,即使上线以后出现了一些问题,也可以通过 hotfix去紧急对应,然后以 hotfix进行部署上线。
Change Set Develop Model使用的优缺点:
优点:
1. 声明式操作,不管是source sandbox的 outbound change set还是target sandbox的 inbound changeset,只需要在UI上面操作,动一动你的手指头便可以搞定。
2. 对于有关联关系的组件,部署简单。类之间相互引用等这种有级联关系的,使用 change set部署很容易。
缺点:
1. 如果公司有多个BU,然后有多个生产环境,并且生产环境需要部署同样的东西, change set方式便会爱莫能助因为 changeset 基于 sandbox的 deployment setting去设置 source and target关系,也只能绑定到一个production环境,涉及到多个生产环境无法实现。
2. 声明式的方式就注定涉及到大量的组件的部署,会相对不方便。
3. 无法实现自动部署,因为只有人工的点击部署按钮,才可以进行资源的部署。
4. profile / permission set等部署会很棘手,这两样部署以前需要查看文档中针对这两个内容的特殊的注意事项,所以老人好多时候就说,如果资源不多,profile就不部署了吧,直接手动生产配置。
5. 追踪组件资源的变更也会很麻烦。
所以我们使用 change set develop model通常用于minor的这种变更,比如针对 trigger / apex class等一些变动,或者增加 修改一个 record type相对应的变更等,可以使用 change set。
2. org development model
相对于 change set模式的缺点, org developmet model就特别适合一个大型项目的运作了。 org development model优点很多,但是针对 change set模式最好的两个特性: 自动部署 & 自动追踪变更。org development model有一个很重要的点就是 VCS(version control system)。国内项目因为体量等原因实际用起来的项目不是特别多,目前对日以及对欧美项目基于 org development model的相对挺多的。印象中之前做过的一个对日项目,项目有几个特性。
1. 项目周期很长,一期项目从0到1的上线持续了1年到1年半的时间;
2. 开发人员很多,相对复杂。每个sprint中针对机能可能会有一些修改或者回滚操作。针对机能的每个版本变更很在意,后续有回滚或者基于哪版继续开发几率高;
3. 每个人一个 sandbox进行开发,使用 git作为代码仓库,开发部署完以后,需要重新部署到各自开发人员以及SIT等环境的sandbox容易并且耗时少,最好可以实现自动化部署。
当然,其他的特点还有很多,上述只是罗列了3点,即: 周期长,版本管理重要,部署要方便。这种场景使用 org development model便会极为的方便,针对后续部署时,哪些内容上,哪些内容不上,复杂的迭代场景也会更加的友好。
当然,org development model也不是万能的,目前salesforce不是所有的metadata都支持使用metadata api或者CLI来部署,针对 org development model不支持的场景,仍然需要走 manual 的操作。这里引申一道题:
Universal Containers has an active production org; and they are planning to release some new features to it next month. The team is working to prepare .1 deployment plan and reached out to the technical architect for inputs on rollback strategy. What should a technical architect recommend? A. Backup the existing metadata using the ANT Migration Tool. To roll back deployment, deploy again to production using backed up metadata. B. Create a sandbox from production to take the backup of existing metadata. To roll back deployment, manually delete new components and then deploy again to production using metadata from this sandbox. C. Create a sandbox from production to take the backup of existing metadata. To roll back deployment, use destructivechanges.xml to delete new components and then deploy again to production using metadata from this sandbox. D. Backup the existing metadata using ANT Migration Tool. To roll back deployment, manually delete new components and deploy again to production using backed up metadata.
我认为这道题应该选择C的。之所以ANT MIGRATION TOOL去备份 metadata不选择,就是有一些是不支持部署的,全量备份还是需要刷新 sandbox去备份,更稳妥。如果有不同理解并且认为我的答案是错的,欢迎相互交流。
3. package development model
我们在实际项目中使用sandbox的缺点是什么呢?我们新起了一个项目,特别小。可能就是写一个 trigger更新一个字段等等。那开发环境的 sandbox因为很久没有刷新,这个表的字段不全,怎么办,现在的做法最稳妥的就是刷新一下 sandbox。 这种场景引申一下,所以我们会发现。如果涉及到 sandbox资源和生产不完整的场景,好多时候我们开发以前的第一步都是要先刷新sandbox保证两边相同,随着生产环境的资源以及存储等区别以及sandbox template type的区别,刷新时间并不完全确定,以 developer Pro sandbox为例,刷新周期是1天。当然,如果生产环境资源少,可能很快就刷新完成,但是如果多的话,可能需要1天。如果我们的工作可能半天就搞定,但是需要等1天的刷新时间,是不是很得不偿失。 salesforce提供了一个新的开发模式,基于包的开发模式,也不需要创建sandbox,可以直接创建 scratch org来进行资源获取以及资源部署。
针对 package development model,推荐一些中文的链接:
https://www.jianshu.com/p/651925a1dd03
Salesforce LWC学习(一)Salesforce DX配置
https://www.jianshu.com/p/aab15e748e48
这里有对 scratch org / package development model以及 salesforce DX配置的一些简单介绍。
总结:篇中只是针对这三种模式很浅的介绍, change set相对容易一些,针对 org development model 以及 package development model实际使用中,特别是大型的项目使用场景下,配置项以及细节考虑特别多。对这些部署模式感兴趣的可以查看头部的相关的官方文档去进行深入的学习。篇中有错误地方欢迎指出,有不懂欢迎留言。
Salesforce 生命周期管理(一)应用生命周期浅谈的更多相关文章
- Salesforce LWC学习(二十三) Lightning Message Service 浅谈
本篇参考: https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist https://d ...
- salesforce lightning零基础学习(十) Aura Js 浅谈三: $A、Action、Util篇
前两篇分别介绍了Component类以及Event类,此篇将会说一下 $A , Action以及 Util. 一. Action Action类通常用于和apex后台交互,设置参数,调用后台以及对结 ...
- salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇
我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...
- Salesforce LWC学习(二十四) Array.sort 浅谈
本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort sal ...
- salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇
上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件 ...
- Elasticsearch 快照生命周期管理 (SLM) 实战指南
文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...
- Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理
我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...
- Salesforce 应用生命周期管理
应用程序生命周期管理 一个Salesforce系统可以有多个版本,最常见的有: production版本:终端用户实际使用的版本 sandbox版本:沙盒环境,用于开发.测试等 在对Salesforc ...
- ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理
ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...
随机推荐
- ELK 收集 Tomcat日志以及修改Tomcat日志格式
ELK 收集 Tomcat日志以及修改Tomcat日志格式 Tomcat日志 想要收集tomcat 日志 首先我们要对tomcat的日志有足够的了解 tomca日志分类 简单的说tomcat logs ...
- (九)羽夏看C语言——C++番外篇
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...
- 痞子衡嵌入式:MCUXpresso IDE下将关键函数重定向到RAM中执行的几种方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下将关键函数重定向到RAM中执行的几种方法. 前段时间痞子衡写了一篇 <在IAR开发环境下将关键函数重 ...
- java 使用匿名内部类实现多线程的创建
匿名内部类的作用:简化代码 把子类继承父类,重写父类的方法,创建子类对象合一步完成 把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成 匿名内部类的最终产物:子类/实现类对象,而这个类没 ...
- dotnet 读 WPF 源代码笔记 渲染收集是如何触发
在 WPF 里面,渲染可以从架构上划分为两层.上层是 WPF 框架的 OnRender 之类的函数,作用是收集应用程序渲染的命令.上层将收集到的应用程序绘制渲染的命令传给下层,下层是 WPF 的 GF ...
- 动态拼接表达式——Expression
我们在项目中会遇到以下查询需求吗? 比如需要查询出满足以下条件的会员: 条件组一:30-40岁的男性会员 条件组二:20-30岁的女性会员 条件组三:60-80岁性别未知的会员 条件组内是并且关系,但 ...
- 【转】Linux 查看端口占用情况
Linux 查看端口占用情况可以使用 lsof 和 netstat 命令. lsof lsof(list open files)是一个列出当前系统打开文件的工具. lsof 查看端口占用语法格式: l ...
- Java技术开发专题系列之【Guava RateLimiter】针对于限流器的入门到精通(针对于源码分析介绍)
Guava包中限流实现分析 RateLimiter 之前的文章中已经介绍了常用的限流算法,而google在Java领域中使用Guava包中的限流工具进行服务限流. 回顾使用案例 Google开源工具包 ...
- 基于AM3352/AM3354/AM3358/AM3359的Linux 开发环境搭建(上)
遇到不少人新手小白问,前辈如何搭建一个优良的Linux 开发环境?之前一直都是在用win开发,现在想要尝试用Linux做开发等等一系列的问题.开源一直是给电子行业工作者提供了一种向技术更深处进发的机遇 ...
- P6657-[模板]LGV 引理
正题 题目链接:https://www.luogu.com.cn/problem/P6657 题目大意 给出$n\times n$的棋盘,$m$个起点第$i$个为$(1,a_i)$,对应$m$个终点第 ...