本帖最后由 FYIRH 于 2021-12-21 13:57 编辑 " p0 E( I! [9 b( I4 u" F2 e
9 w5 H' c8 B) M' l
( ~, i* O1 I. j0 R% @4 F8 J' k3 z; O, R5 M
成功地部署和发布软件系统,对于组织是一项重要任务,实现它就需要有坚定的 DevOps 战略。
0 Q. N& y8 A8 _; p" z* \3 o) G' O9 g+ W, v
长期以来,软件系统可靠地发布和部署一直是困难且耗时的过程。随着软件行业慢慢转向更快的发布节奏,部署和发布也变得越来越有价值,尤其是对于托管的软件。% @5 P; t$ @2 o( b/ V
9 c5 E1 r( V2 sDevOps 就是通过自动化来满足软件发布不断加速的节奏,因此不可避免地要面对挑战。本文将带你一起探讨如何应对挑战,实现 DevOps 的成功。' @) [" @& H; y; c' }6 v, z
7 e4 b$ H- H+ [ U
! O% ^/ h, m1 \' b v: q技巧1:让 DevOps 适应你的文化
Q9 k* u. b* u& J4 T- l. W' F1 r* z
. q6 J- p7 v: M7 s“ Devops致力于寻找方法来适应和改革社会结构,文化和技术,以便更有效地开展工作。”$ o/ W$ Z( Z% @2 V; q9 M! v
―Jennifer Davis和Ryn Daniels合著的《Effective Devops》 ; v4 u. j* M0 p) k
技巧2:对速度的需求8 F P1 D ^+ h9 K
c# _* P3 y0 A
DevOps 频繁交付模型,意味着频繁的构建,测试和部署。团队规模和交付的节奏可能会对计算或网络资源造成巨大压力。无论是私有平台还是云平台,对流水线资源进行投资,都是至关重要的。& u5 r& |2 S, G+ y. C
r5 W4 ^3 p* k4 [" h
自动化的单元测试也至关重要,如果没有自动化的集成测试,就不可能真正了解系统状态。集成测试应包括端到端,安全性,负载和弹性的测试。这些可能是时间密集型的和资源密集型的,但是对于衡量交付质量至关重要。如果运行回归测试需要8个小时,那么你会可以创建虚拟测试环境。
! m2 J9 c- }' ~% f; C- `1 m2 \7 _" d+ K; G# k
技巧3:可用性
: Z# J' p- h+ t/ `2 D7 T8 S" Z
& Y: y0 N* S; ^ z# c, S
与性能齐头并进就是可用性。持续交付中的“持续”,意味着高可用的流水线。这就需要选择高可用组件,使他们能够在部分失效的情况下,重新或继续运行。 j; ?; _/ r# p5 P6 W
可以通过使用高度可用的系统,或使用无需用户干预进行扩展和修复的云端SaaS 解决方案,来实现可用性。CircleCI 和 Github Actions 是流行的 SaaS 服务,将提供高度可用的基于云的 DevOps 平台。两者都支持本地测试,以便你可以根据需要将云服务与本地环境混合在一起。 6 X: M) `" W, F1 t# C
技巧4:收集和使用 DevOps 指标
7 r, v0 \6 ~1 I3 p3 I9 l0 h9 Y5 V+ }/ P
9 y7 X8 ~& Z' w. K6 [“如果无法衡量,就无法改善。”7 M [1 t* j% z) k
– 彼得·德鲁克
' S+ }1 T. j( V+ P$ g5 n像任何软件系统一样,DevOps 流水线本身也需要随着时间的推移而发展和改进。
" D+ L/ i. z9 t l/ c( V$ R! e& S# U6 ^# W
为了适应不断变化的环境,必须经常对执行自动测试和交付的系统进行测量和改进。针对诸如测试时间性能(单位和回归),故障率,成本(如果是云托管)和实际可用性(停机)之类的指标,进行评估。6 O! u6 A# W+ V; `* n( k
8 d1 S" x+ v5 }% g1 ?
这些指标也与业务指标相关联,例如交货时间,部署频率和平均恢复时间(从故障中恢复)。DevOps工具链的性能是所有这些的基础。1 g; @0 \, m0 B% c3 }' x& L9 f$ |/ l
- m) C- ~4 e* h( ?4 u& A9 u4 x技巧5:关注有意义的测试
+ t2 @2 c' ]& [( H) R& X) z' o( C- r8 \( J3 ?5 \
“追求测试覆盖率指标的组织,应该做些更有用的事情”
/ b4 l% l) l; c1 b8 f―马丁·福勒(Martin Fowler)
# y' R7 [+ K1 A4 }4 s* a* d& K ^8 j常见的开发测试指标是“代码测试覆盖率”。此度量标准的目的是确定对代码中潜在逻辑路径进行了多少百分比的测试。因此,它们是指出哪些代码需要被更正的一种很好的工具。当然,他们仅限于分析给出的代码,没有告诉你应该编写什么代码来处理某些情况,例如,他们不会告诉你异常处理不充分,或者你忽略了处理特定的返回状态。
; U# A5 g4 S" t1 {9 M* y: |
6 f* v* F7 f, u倾向于使用特定的代码覆盖率,这是一个错误,因为开发人员在承受压力时会以牺牲质量为代价来提高覆盖率。测试覆盖范围不是代码质量的实际度量,它所提供的是对开发人员检查其工作的方法。% I8 p* x4 x+ j! |' q3 q) S
I# F) u6 T4 n良好的测试覆盖范围应该是目标,而不是硬性限制。为了捕获那些“遗漏错误”,强大的集成测试功能可以提供帮助。
4 N4 h8 {/ W" m
! T: G# H W( u7 W' i+ a. f: F为了安全和可用性起见,我们应该知道所有代码都不相等。广泛重复使用的代码或可能执行破坏性行为(例如删除客户数据)的代码需要更高级别的测试覆盖范围和审查。编写测试非常耗时,需要首先全面地关注关键代码。
7 s' H" l, l, U" ]' O1 o: j# v0 V l$ ]
为了对自动化测试结果充满信心,集成测试环境应尽可能模拟生产环境。在托管应用程序的情况下,这可能非常简单,而在本地环境中,复杂性几乎是无限的。目标环境越复杂,越多样化,就需要进行更多的测试。0 _8 l, M# v1 P! M+ W
9 [/ s. Y9 \4 x- a7 f
总结0 N. Z5 g& U k2 D$ |! s
# x9 n) E- T" i$ m- t
DevOps 的基本目标是简化向客户交付产品的过程。它试图打破开发人员和运维人员之间的传统障碍,以实现软件功能的频繁发布和错误修复。频繁交付的能力需要高度的自动化,尤其是端到端的测试。* K) L! E; A1 [- T" j5 y& P
$ w( C) I" }! v+ r; K虚拟化技术的一大优势是能够启动服务器和网络配置的任意集合(测试沙箱)。使用适当的编排工具,可以按需配置测试环境,从而大大增加了测试面积,并实现了自动化。(转自王延飞)
" u8 d/ Z$ @- t8 q$ P1 {, `) C
+ G6 s, I5 P& H* H" t! j5 f2 i9 ]
: { O- K+ v! K; ?
1 l; p! ?3 X& A9 B
$ T9 C) Y3 n. ~0 ?% D$ h! c0 r& ~, G |