请选择 进入手机版 | 继续访问电脑版

ITIL,DevOps,ITSS,ITSM,IT运维管理-ITIL先锋论坛

 找回密码
 立即注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 985|回复: 0

持续交付的实践与思考

[复制链接]
发表于 2020-8-3 15:07:02 | 显示全部楼层 |阅读模式
本帖最后由 陈小宝 于 2020-8-3 15:10 编辑 0 J+ N+ `2 s) I/ ^0 g  D) h

" l0 r% N/ n  r( w. |# Z

2 L4 B! O* B( J) L# D3 _
粘贴上传202008031504209120..png
' L9 |4 y7 F% F" g
开始以为这本书会有一些偏理论,然后读过之后才发现有一种想见恨晚的感觉,作者在项目管理中遇到的很多问题正是我们也经常遇到的。
首先引用敏捷第一宣言:“我们的首要任务是尽早持续交付有价值的软件并让客户满意。”- S+ _5 ]; Z' U
& P1 `8 G" {7 B
9 t5 B/ g/ ?$ P9 M* R2 r

* c- M( ^" u6 Q& [+ _
2 S& E; e7 H. `8 c# P7 S2 u( [
常见的发布反模式
  • 手工部署软件
  • 开发完成之后才行类生产环境部署
  • 生产环境的手工配置管理
    " f0 G) H# l" R* z' u0 t4 |
    & i$ {9 g8 r+ H: \7 n8 z  j, P

& j% I1 ^/ [! w8 T. l8 y
配置管理

' j! T3 C, u6 O, j* B
   
4 w: f9 S& |% [' N2 n( a9 v& n   版本控制7 E5 t/ ?8 N& U8 z7 x6 S0 ]( X
  • 对所有内容进行版本控制; S0 W# R7 a& ]5 e  H
    • 不只是源代码管理,每个与锁开发的软件相关的产物都应被置于版本控制之下
    • 不推荐将编译后的二进制文件纳入版本控制,
      4 h: V0 T' @) M0 _( {$ R
  • 频繁提交代码到主干, 为了确保提交代码时不破坏已有的应用程序
    , T  ]6 N5 L# b( E2 L' d) v2 j7 a
    • 一是提交代码之前运行单元套件
    • 二是增量式引入变化,建议每完成一个小功能或一次重构之后就提交代码。
      . v( X  m, \0 @  r
  • 使用意义明显的注释,注释中最好包含一个链接,可以链接到项目管理工具中的一个功能或缺陷。/ m5 S1 N& F7 [* ]5 x7 k0 y

# R0 o$ B% a$ U9 }0 A# ?2 n$ `' [
   
: v4 e0 t2 E6 `+ }+ z. _   依赖管理; }( k* R- k+ x8 N! V% q3 f$ T  m
  • 外部库文件管理 * 应该始终指定外部库的确切版本
  • 组件管理
    & W- ^- \, B8 O

1 w: @1 x* {8 `- F* M, t
   
5 d: T; G( Y$ H3 L   实现持续集成
  h0 L: X% T. K5 U
  • 准备工作7 Y1 f+ w! e% B+ Z& |* x
    • 版本控制(git,svn)
    • 自动化构建(fastlane)
      1 Y. u$ G! V  _
  • 持续集成的前提条件
    5 @# F  b( k# O. u# ^- u7 n0 a
    • 频繁提交
    • 创建全面的自动化测试套件
    • 保持较短的构建和测试过程6 X7 g: x; H6 i3 s! S, t0 H, ?
  • 必不可少的实践$ k% A, Y  z- v/ {0 E1 i
    • 构建失败之后不要提交新代码
    • 提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事
    • 等提交测试通过后再继续工作
    • 回家之前,构建必须处于成功状态
    • 不要将失败的测试注释掉
      % p8 Z' c3 k# d

- c& F( f  }' {

" M: J: x) `; C' Z6 Y3 y* M8 s8 A: l

% S( e, n' E; B6 R   自动化测试中的测试替身' d( M( Q! P0 x3 i: ]# j' v& V5 R
  • 哑对象(dummy object)指那些被传递但不被真正使用的对象,它们通常只用于填充参数列表。
  • 假对象(fake object)是可以真正使用的实现
  • 桩(stub)为每个调用提供一个封装好的响应。
  • 模拟对象(mock)是一种在编程时就设定了它预期要接收的调用。$ l* z" h1 c0 [. O+ w, {9 ~
/ j& |0 R- ]3 x" z/ A
7 K& Q% J, q4 C% K0 X  f3 l' c
" s: H2 ?+ u- I/ H& \
   提交阶段/ o& F) Q- G  |/ R( h

) ~& B5 x4 E) A0 b: y) P$ m提交阶段是怎样工作的?
4 ~/ B2 u6 e2 p, T# R, U
  • 编译,并在集成后的源代码上运行提交测试。
  • 创建能部署在所有环境中的二进制包
  • 执行必要的分析,检查代码库的健康状况。
  • 创建部署流水线后续阶段需要使用的其他产物。(比如数据库迁移或测试数据): W9 U# }' X! M1 n5 _; T

- T  i, I* l0 E
1 s' b0 ^9 y& s+ g4 \

* k6 }$ O% m  n% b提交阶段的首要目标是要么创建可部署的产物,要么快速失败并将失败原因通知给团队。) ~2 @6 T" |$ L+ T$ z: A
    ( \5 g  {# L( L
  • 提交阶段比较有用的度量项
  • 测试覆盖率
  • 重复代码的数量
  • 圈复杂度
  • 输入耦合度和输出耦合度
  • 编译警告的数量
  • 代码风格
  • 提交测试阶段测试套件的原则与实践
  • 避免用户界面 测试困难,耗费时间和精力 速度慢 * 可以放在验收测试节点处理
  • 使用依赖注入
  • 避免使用数据库
  • 在单元测试中避免异步 * 解决方法就是拆分测试,将异步操作拆分单独的单元测试。
  • 使用测试替身 Stub, 常常需要额外写很多代码,我们不需要关心桩是如何被调用的 Mock, 一般通过Mock框架模拟对象,我们需要验证代码是否以期望的方式与模拟对象交互。
  • 最少化测试中的状态
  • 自动化验收测试
    & y8 X5 F/ F* U, f- U
  • 窗口驱动器模式,也就是分为测试实现层和窗口驱动层,这样使测试实现层抽象层次更高,只有窗口实现层才与具体的GUI打交道。
  • 我理解的自动化测试是:为了验证用户故事是否满足业务而编写的一系列操作过程,与单元测试不同的是,它是面向业务,而单元测试是面向开发人员的。
  • 如何实现验收测试
    # [/ o$ l3 {3 o9 {" w( w
, S2 v% }# c3 E* M# R: E: O' u

0 ~' S) \( J4 x# Z8 d# c+ A
1 `5 A5 E% n' [3 I
   分支与合并4 R. J! O1 f" v* X4 q7 i
6 x2 o/ t; Q% c) H, b7 Z+ ]+ O7 y
几种常见的分支发布策略:
+ m: H9 o: i; B# ^5 g% @; V% v$ f
  • 主干开发;说白了,就是所有开发人员都往主干分支上提交代码。
  • 按发布创建分支;即当软件准备发布的时候,才从主干创建分支。
  • 按功能特性分支;应该是当下很多公司比较喜欢使用的一种策略。
  • 按团队分支;比较适合大型团队,为每个团队都创建一个分支。
    , b5 h3 U; R* |. V4 D

; o1 `$ g+ e4 R* y9 L

  Z% B0 l% p" n& g/ s2 _
% o; ?* o' [6 B0 Z9 \2 K5 W
基于主干开发的三个好处:
6 O: I& P% g& }" N+ K) [3 u
  • 确保所有的代码被持续集成。
  • 确保开发人员及时获得他人的修改。
  • 避免项目后期的“合并地狱”和“集成地狱”。* F" W4 D# K* t5 N( I
6 Y4 m5 _3 u* ^+ S

* g- l3 M7 P6 E
% b4 R. v; O/ q$ C& ]' D
( _6 q6 G, C) K5 D! Q  e
文中指出,“创建分支”与“持续集成”往往是背道而驰的,意味着说创建分支越多,就越难实现持续交付,因为开发人员都在各自的分支频繁提交代码,而“分支”上的代码往往在几天之后(甚至更长的时间)才会合并回主干,这样会导致在后期才会发现因合并代码导致的种种问题。(DevOps时代)




上一篇:10个最受欢迎的DevOps面试问题和答案
下一篇:实施 DevSecOps 的 10 项方法,看完这篇就够了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

参加 ITIL 4 基础和专家认证、长河ITIL实战沙盘、DevOps基础级认证、ITSS服务经理认证报名

QQ|ITIL ( 粤ICP备11099876号 )|appname

GMT+8, 2022-9-26 19:42 , Processed in 0.100304 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表