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

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

 找回密码
 微信、QQ、手机号一键注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 623|回复: 0

持续交付的实践与思考

[复制链接]
发表于 2020-8-3 15:07:02 | 显示全部楼层 |阅读模式
本帖最后由 陈小宝 于 2020-8-3 15:10 编辑
6 ~) p# J* s8 D( ]; A0 C
$ V7 |' W/ T% i; I

$ u! q# w3 Y$ U
粘贴上传202008031504209120..png
; g  f+ q/ o9 q! S% g
开始以为这本书会有一些偏理论,然后读过之后才发现有一种想见恨晚的感觉,作者在项目管理中遇到的很多问题正是我们也经常遇到的。
首先引用敏捷第一宣言:“我们的首要任务是尽早持续交付有价值的软件并让客户满意。”
+ g$ u( J% ^1 b. _  G& k  [9 v$ h. T" z, Q0 s$ ]

4 d. B( V9 A$ t% w# Q
  q: e: Q+ ~# I. E2 z* a5 V3 j! k  Y
4 ^5 \1 e" ?/ S' u! U/ Y5 g6 H; ^# K
常见的发布反模式
  • 手工部署软件
  • 开发完成之后才行类生产环境部署
  • 生产环境的手工配置管理
    * _) ~( {$ I4 M: Z% ^

    2 S: z$ X% t' S; j" U% N$ [& x

8 p) U4 y# g* q/ V' w# X, j
配置管理

$ Z4 x+ o: ]0 h  p8 l/ H
   1 U* d7 `7 x4 W: w! w) I6 H" j( M0 u0 g
   版本控制( `$ m% @9 \( V
  • 对所有内容进行版本控制
    & X6 P3 j# ^* n" i6 J1 S( V" W
    • 不只是源代码管理,每个与锁开发的软件相关的产物都应被置于版本控制之下
    • 不推荐将编译后的二进制文件纳入版本控制,. ?& f( Y' }; b; d+ w7 n: L
  • 频繁提交代码到主干, 为了确保提交代码时不破坏已有的应用程序
    ; X) K4 \" W. s3 k/ Q
    • 一是提交代码之前运行单元套件
    • 二是增量式引入变化,建议每完成一个小功能或一次重构之后就提交代码。# g0 Z8 \5 V) b# T
  • 使用意义明显的注释,注释中最好包含一个链接,可以链接到项目管理工具中的一个功能或缺陷。3 y  b5 T" |& z" {& v0 A
, j! y( m/ t2 J+ H6 i
   % N) t! o- [$ V: T; _
   依赖管理$ R6 x$ o4 ^. b8 `1 s( `
  • 外部库文件管理 * 应该始终指定外部库的确切版本
  • 组件管理
    . n+ c1 Y8 r7 \  N# k& e( G
! r& p) Y0 i  I( B
   
# D* _6 r: e* e/ t   实现持续集成
. Q& l9 U* T0 w' v5 C, E$ a' |
  • 准备工作
    3 M- |3 ]+ f& s
    • 版本控制(git,svn)
    • 自动化构建(fastlane)
      + D" ?* }) B5 r" R: X" ^4 |$ f: t8 p
  • 持续集成的前提条件* a, O8 j. \/ E/ a3 `+ Y
    • 频繁提交
    • 创建全面的自动化测试套件
    • 保持较短的构建和测试过程
      . w, n( x8 }* |9 L2 U7 N
  • 必不可少的实践
    , O' N1 T3 h: @8 E; W$ t
    • 构建失败之后不要提交新代码
    • 提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事
    • 等提交测试通过后再继续工作
    • 回家之前,构建必须处于成功状态
    • 不要将失败的测试注释掉
        }) a+ S) Z$ y; ]

6 T# y5 V. x5 H, Q  w
9 W+ t5 k) T  F  T  q* _8 D' e3 c0 m
* C/ [0 k5 a& x, l0 Z
   自动化测试中的测试替身
: K" P0 I0 ], P% R
  • 哑对象(dummy object)指那些被传递但不被真正使用的对象,它们通常只用于填充参数列表。
  • 假对象(fake object)是可以真正使用的实现
  • 桩(stub)为每个调用提供一个封装好的响应。
  • 模拟对象(mock)是一种在编程时就设定了它预期要接收的调用。
    % O" J6 I  k+ j& V6 m

# v6 `: r' E" g
! h2 R7 {+ i& ^7 t) F# k) [

3 T* a. A! |2 @6 h   提交阶段  ?( g( t% [2 ]

* x/ ^3 C+ x* P1 f提交阶段是怎样工作的?
8 H% Z/ [. C9 X, B2 w) Q
  • 编译,并在集成后的源代码上运行提交测试。
  • 创建能部署在所有环境中的二进制包
  • 执行必要的分析,检查代码库的健康状况。
  • 创建部署流水线后续阶段需要使用的其他产物。(比如数据库迁移或测试数据)
    % q" j1 g! p! X% E( I5 ]
$ l4 R5 u# q3 I8 J* ~- z0 j& `- d5 q: ]
) n' C7 D8 s8 @2 x# t
1 V0 L5 N) A4 @  }; @
提交阶段的首要目标是要么创建可部署的产物,要么快速失败并将失败原因通知给团队。' b% \, ?. C: c

    5 @9 V! d+ v2 T; L" q$ O/ K( h
  • 提交阶段比较有用的度量项
  • 测试覆盖率
  • 重复代码的数量
  • 圈复杂度
  • 输入耦合度和输出耦合度
  • 编译警告的数量
  • 代码风格
  • 提交测试阶段测试套件的原则与实践
  • 避免用户界面 测试困难,耗费时间和精力 速度慢 * 可以放在验收测试节点处理
  • 使用依赖注入
  • 避免使用数据库
  • 在单元测试中避免异步 * 解决方法就是拆分测试,将异步操作拆分单独的单元测试。
  • 使用测试替身 Stub, 常常需要额外写很多代码,我们不需要关心桩是如何被调用的 Mock, 一般通过Mock框架模拟对象,我们需要验证代码是否以期望的方式与模拟对象交互。
  • 最少化测试中的状态
  • 自动化验收测试
    ; g' l6 g) t" }/ ^# d/ A2 J' C% Y& R
  • 窗口驱动器模式,也就是分为测试实现层和窗口驱动层,这样使测试实现层抽象层次更高,只有窗口实现层才与具体的GUI打交道。
  • 我理解的自动化测试是:为了验证用户故事是否满足业务而编写的一系列操作过程,与单元测试不同的是,它是面向业务,而单元测试是面向开发人员的。
  • 如何实现验收测试
    2 ]! J0 x: n( {3 l( z, Q. Z

7 ]# d. M) Z+ c5 B0 _$ n
4 S; L$ @4 `4 V9 F2 H! `6 l

  y: C: ~/ s- Q3 p5 `. A   分支与合并$ j% U" A: a: g- O7 l

5 f. t/ O! o4 o; H+ K" @几种常见的分支发布策略:0 a6 [- P7 T$ K; ~
  • 主干开发;说白了,就是所有开发人员都往主干分支上提交代码。
  • 按发布创建分支;即当软件准备发布的时候,才从主干创建分支。
  • 按功能特性分支;应该是当下很多公司比较喜欢使用的一种策略。
  • 按团队分支;比较适合大型团队,为每个团队都创建一个分支。
    * W1 F7 j5 @" e; h

) a( `  g8 X, a0 M) ?3 G3 Y; M! n

, i9 `7 ?. X) d' O4 z
2 a: ~  R! R- j& O* o6 Y
基于主干开发的三个好处:1 T- H8 z; t, _7 q
  • 确保所有的代码被持续集成。
  • 确保开发人员及时获得他人的修改。
  • 避免项目后期的“合并地狱”和“集成地狱”。% L5 E  f: s+ ^0 }- L& Q: k

6 e. ~0 d8 {5 v  o4 K
! M9 G5 S' a8 @
( j) r+ ^: k( i+ |) m( }: w

/ m$ \5 q7 \1 i/ ^文中指出,“创建分支”与“持续集成”往往是背道而驰的,意味着说创建分支越多,就越难实现持续交付,因为开发人员都在各自的分支频繁提交代码,而“分支”上的代码往往在几天之后(甚至更长的时间)才会合并回主干,这样会导致在后期才会发现因合并代码导致的种种问题。(DevOps时代)




上一篇:10个最受欢迎的DevOps面试问题和答案
下一篇:实施 DevSecOps 的 10 项方法,看完这篇就够了

本版积分规则

参加 ITIL 4 基础和中级专家认证、v3专家升级、DevOps专家认证、ITSS服务经理认证报名
本站关键字: ITIL| ITSM| ISO20000| ITIL培训| ITIL认证| ITIL考试| ITSS| ITSS培训| ITSS认证| IT运维管理| DevOps| DevOps培训| DevOps认证| itop| itil4| sre| 开源ITSM软件

QQ|小黑屋|手机版|Archiver|艾拓先锋网 ( 粤ICP备11099876号-1 )|网站地图

Baidu

GMT+8, 2021-5-7 03:35 , Processed in 0.155163 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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