什么是准入?
准入是对当前状态的必要条件进行判定的过程。
在进行变更之后,我们开发完成就会进入发布的环节,但我们的发布流程或者发布系统会对我们本身的代码做一个检查,通常我们要实现一个需求或者把问题修复的时候,我们会建立一次变更,然后进行一些研发的测试,但当我们代码写完了,测试也测完了的时候,我们的诉求肯定是想要发布,但是在发布时,我们就需要考虑当前的代码是否可能会对未来产生影响,这里不仅仅是功能层面,还会有很多功能层面没有考虑到的地方。它可能牵扯到更细节的地方,也可能牵扯一些我们没有注意的地方。 所以我们需要考虑几点:
- 健康
首先需要考虑我们的代码一定是健康的,如果代码不健康那么不仅会影响自身,也可能污染其它代码。 - 安全
安全是非常关键的一点,因为一旦存在线上安全漏洞,可能造成的损失是不可估量的。 - 流程
准入它也是检测当前发布流程前半程的流程是否走完的一个很好的节点,比如像安全审核、CodeReview 这些是否在前置环节已经达成了,这里我们可以做统一拦截,针对不达标的应用做卡点。 - 协同
这个流程是相辅相成的,就是这个流程到底谁去做,或者谁去审批,这些审批流程到底走的怎么样,是否已经知道这些信息了,都可以通过准入这个点来做相关卡点。 - 合规
这个相对来说会比较少,但是有的时候比如这个变更可能是线上变更,它牵扯到将一些数据发布到对于公众的平台里,那就会涉及到经过法务这一关,如果法务审批的合规情况没有通过,那就需要对其进行拦截,避免不该发布到线上的东西发布。
所以,回过头来去看 ,这个状态就是我要从当前代码到安全、到整体信息协同、再到信息合规,这些都是我们当前要发布到线上的时候必备的条件,如果达不成,轻则带来一些损失,重则可能带来的就是故障或者灾难。
因此准入就是这个环境最重要的一点,它源于变更,但又由变更的下游去提供了这样一个相对来说严格而又重要的一环。
当然准入也会包含大量的节点,因为不论是健康、安全、还是合规流程都可能是一个个节点,这些节点串连起来最终形成一个链条。这个链条就是一个准入链。 当然很多时候它可能不仅仅是一个链条,有可能是多个链条,针对多个链条共同构成一个准入清单。
围绕整个清单具体去看:
健康安全
这一卡点上不仅是要保障目前变更的代码它本身的健康,要具备其安全性,并确保上线满足预期。
1. 代码扫描
这里我们通常会有代码扫描去做相关的信息扫描,可能包括规范扫描、性能扫描以及一些潜在异常扫描。 通过扫描我们会将代码中可能存在的问题都挖掘出来,这样我们可以确保上线之前对其进行处理,进而确保线上稳定无忧。
2. CodeReview
CodeReview 这块主要牵扯到了 代码审查是否完成,我们通过其他人帮你进行 CodeReview 来确保你的代码在整体的团队中得到大家认可,并且大家也能知道你这次的设计和预期,进而确保你的代码出现不良设计的时候进行纠正和修复。
3. 风险扫描
风险扫描包含常规的漏洞扫描,比如你的代码有常规的 XSS 漏洞,或者依赖的第三方包本身可能存在漏洞。 还有一些低版本扫描,对于一些业界的开源包他们都有一些推荐版本的包,这种情况可能就说明更早的版本会出现一些问题,无论是性能问题还是安全问题,那我们都需要在这之上去完成版本更新,通过低版本扫描可以帮助我们把一些潜在问题都排除掉。 最后还有一些 SQL 风险扫描,比如 SQL 注入可能存在的风险、慢 SQL 可能存在的风险,以及你的 SQL 如果没有命中索引导致全表扫描。 通过这样一些扫描,能够帮助我们把代码中的一些问题和不健康的新号发现出来,从而保证我们代码健康无忧。
流程协同
流程协同主要是确保我们发布流程正确合规。第二也能确保通过流程把上下游触达的人员都能充分得到相关信息。
1.测试检查
比如测试检查的环节,可能包含 CR 流程、自动化执行流程。这些流程是确保你到达这些节点时已经走完。因为 CR 是很多人共同参与的流程,而自动化则是一个需要时间去验证的过程。那么在这里做好相关卡点,等待二者流程完成,也是能够实现我们在上线的代码都能妥善解决。
2. 紧急发布申请
它是一个我们在发布窗口之外需要给予发布去修复某些问题的申请,这里我们通常是跳过发布窗口的卡点,能够让我们不受发布窗口的限制。 第二是我们面对一些比如马上过节了,马上过年了,我不能再发布了,或者有一些大型的活动,大型的验收、发版,在这些时候我们都需要对代码进行封版。避免再引入一些不可控的问题。但是封版不是绝对的,有时候会遇到一些问题,这些问题需要修复,那就需要紧急申请,可能申请需要比较高的层级,流程也比较长,但是作为准入卡点来说,它是必不可少的。
3. 审批流程
审批流程主要包括:
- 发布审批流程
- 安全审批流程
4. 流量控制
这个主要是在灰度发布过程中。 当我们想要去申请一次灰度发布,让线上流量能够流转到当前新发布的功能之上时,需要走相关流程,控制流量能够进入当前代码。 同时,在你验证了当前流量没问题的时候,可以不断增大灰度范围,直到最后确认流量切换到新的代码分支上,这样就完成了流量切换流程。
总结
风险控制
通过上面这样我们就做好了在发布之前,所有准入卡点做好相关风险控制,而卡点可以控制存在风险不可被通过。
联通触达
卡点具备的联通触达的能力也能流程相关人员都能被触达,并且与人员相关的行为都可以触达下一个环节。
信息记录
而最后它也起到相关信息记录,所有扫描结果和卡点结果都被记录到流程之中,可以帮助一旦线上出现问题的时候协助记录问题定位,并且能够明确出责任到底在哪里。
将这些共同串联起来,就能够帮助我们完成安全生产、发布过程中的细节落地。 通过卡点这个守门员的职能,帮助我们把线下风险控制到研发流程之中,避免将这类风险带到线上,从而确保线上稳定。
|