本篇参考:

https://trailhead.salesforce.com/en/content/learn/trails/determine-which-application-lifecycle-management-model-is-right-for-you?trailmix_creator_id=strailhead&trailmix_slug=architect-dev-lifecycle-and-deployment

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 生命周期管理(一)应用生命周期浅谈的更多相关文章

  1. Salesforce LWC学习(二十三) Lightning Message Service 浅谈

    本篇参考: https://trailhead.salesforce.com/content/learn/superbadges/superbadge_lwc_specialist https://d ...

  2. salesforce lightning零基础学习(十) Aura Js 浅谈三: $A、Action、Util篇

    前两篇分别介绍了Component类以及Event类,此篇将会说一下 $A , Action以及 Util.  一. Action Action类通常用于和apex后台交互,设置参数,调用后台以及对结 ...

  3. salesforce lightning零基础学习(八) Aura Js 浅谈一: Component篇

    我们在开发lightning的时候,常常会在controller.js中写 component.get('v.label'), component.set('v.label','xxValue'); ...

  4. Salesforce LWC学习(二十四) Array.sort 浅谈

    本篇参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/sort sal ...

  5. salesforce lightning零基础学习(九) Aura Js 浅谈二: Event篇

    上一篇介绍了Aura Framework中 Component类的部分方法,本篇将要介绍Event常用的方法. 1. setParam (String key , Object value):设置事件 ...

  6. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...

  7. Salesforce LWC学习(四) 父子component交互 / component声明周期管理 / 事件处理

    我们在上篇介绍了 @track / @api的区别.在父子 component中,针对api类型的变量,如果声明以后就只允许在parent修改,son component修改便会导致报错. sonIt ...

  8. Salesforce 应用生命周期管理

    应用程序生命周期管理 一个Salesforce系统可以有多个版本,最常见的有: production版本:终端用户实际使用的版本 sandbox版本:沙盒环境,用于开发.测试等 在对Salesforc ...

  9. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

随机推荐

  1. NX二次开发-使用NXOPEN C++向导模板做二次开发

    版本 NX9+VS2012 1.怎么往VS软件里添加VC,C#,VB向导模板 先到NX安装目录下UGOPEN文件夹里找到这三个文件夹 拷贝到VS的安装目录下 这里有几个注意事项,VS2017,VS20 ...

  2. 在python3.6环境下使用cxfreeze打包程序

    在python3.6环境下使用cxfreeze打包程序 环境:python3.6 打包程序:aliens_invasion 原本想使用pyintaller 进行打包,使用pip的安装过程也没有问题,打 ...

  3. Git 系列教程(1)- Git 简介

    前言 因为工作中目前要大量使用 Git,虽然之前已经会用了,但没有系统的总结过,现在来重新总结 概念篇会直接搬网上的教程,比如:菜鸟.廖雪峰.老张.中文版Git,就不再花时间自己总结过概念了 Git ...

  4. Git 系列教程(11)- 分支简介

    前言 很多版本控制系统都有分支这个概念 使用分支意味着可以将日常工作从主线上脱离,从而避免影响主线 Git 鼓励在工作流程中频繁使用分支和合并 Git 是如何保存数据的 Git 保存的不是文件的变化或 ...

  5. 一行Java代码实现游戏中交换装备

    摘要:JDK 1.5 开始 JUC 包下提供的 Exchanger 类可用于两个线程之间交换信息. 本文分享自华为云社区<一行Java代码实现两玩家交换装备[并发编程]>,作者:陈皮的Ja ...

  6. Vue组件传值(三)之 深层嵌套组件传值 - $attrs 和 $listeners

    $attrs 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class和 ...

  7. [第十三篇]——Docker Compose之Spring Cloud直播商城 b2b2c电子商务技术总结

    Docker Compose Compose 简介 Compose 是用于定义和运行多容器 Docker 应用程序的工具.通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务.然 ...

  8. Maven专题3——生命周期与插件

    三套生命周期 Maven有3套相互独立的生命周期,用户可以调用某个生命周期的阶段,而不会对其他生命周期产生影响. 每个生命周期包含一些有先后顺序的阶段,后面的阶段依赖于前面的阶段,意味着用户调用后面的 ...

  9. Linux系列(41) - 监听命令Vmstart,Top(还需完善)

    一.简介 vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控:属于sysstat包:它是对系统的整体情况进行统计 ...

  10. mysql 优化的相关配置:总结中...

    centos 为例:mysql 怎么获取配置参数信息: /etc/my.cnf; /etc/myql/my.cnf/; 家目录:或者指定目录:作用域 客户端:全局 set global 会话 set[ ...