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

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

 找回密码
 立即注册

扫描二维码登录本站

QQ登录

只需一步,快速开始

查看: 792|回复: 0

持续交付的实践与思考

[复制链接]
发表于 2020-8-3 15:07:02 | 显示全部楼层 |阅读模式
本帖最后由 陈小宝 于 2020-8-3 15:10 编辑
: w$ R8 ?- }+ x/ r9 U' a
' k- A/ u' i6 t' N4 }; ^
5 z+ T% k' Z7 t8 |
粘贴上传202008031504209120..png
$ r8 W+ [) G4 A* Z% P- x: X
开始以为这本书会有一些偏理论,然后读过之后才发现有一种想见恨晚的感觉,作者在项目管理中遇到的很多问题正是我们也经常遇到的。
首先引用敏捷第一宣言:“我们的首要任务是尽早持续交付有价值的软件并让客户满意。”
6 O- j1 `6 m& L; w1 q) `- ]8 U6 i
7 A5 g: a5 d1 K0 h
6 a6 U, l- X6 G. F( c
- U% l& z0 N: p5 K& g" \; O" @5 {$ P

: c2 Z; U" l2 y* E7 Q% o. s
常见的发布反模式
  • 手工部署软件
  • 开发完成之后才行类生产环境部署
  • 生产环境的手工配置管理. `: F" X" a  h5 K$ A: S8 h

    + J2 _. U6 |8 Z& [
/ Y# V! @  R! @# Q5 U  [
配置管理

. a' A. U7 z7 h+ V3 y( O2 |
   1 X  C  [$ A, b
   版本控制8 G2 u4 G+ k( E6 s6 f
  • 对所有内容进行版本控制+ R+ x# K6 L5 p. u; x8 R9 T
    • 不只是源代码管理,每个与锁开发的软件相关的产物都应被置于版本控制之下
    • 不推荐将编译后的二进制文件纳入版本控制,
      : `  Y  K$ W. G2 K0 @
  • 频繁提交代码到主干, 为了确保提交代码时不破坏已有的应用程序/ {9 z7 @9 q4 |; Y( [- D" s; [/ g
    • 一是提交代码之前运行单元套件
    • 二是增量式引入变化,建议每完成一个小功能或一次重构之后就提交代码。
      3 c+ t# f% ]' {# b
  • 使用意义明显的注释,注释中最好包含一个链接,可以链接到项目管理工具中的一个功能或缺陷。
    , h2 w4 ^) p7 A+ m1 F( o& {% ~

1 N7 G- o2 g: N8 Q% q" u
   : ]% z6 N' R4 L! D
   依赖管理+ x2 H( d  I: k# Q) k. S. I
  • 外部库文件管理 * 应该始终指定外部库的确切版本
  • 组件管理
    # B. `) Z. l' R& {, P( |3 P
% r+ C% j1 q4 o$ e6 ?! {
   
- L4 k( r% q0 C, L   实现持续集成8 c3 s6 U5 z7 r4 U. }9 d/ e
  • 准备工作( F- ?, r8 q) Q. H+ l* P" H
    • 版本控制(git,svn)
    • 自动化构建(fastlane)
      9 {% e/ ?7 Y* l' A3 V% ~# n
  • 持续集成的前提条件3 L# R  x* h) J$ x3 }7 x- ?) B
    • 频繁提交
    • 创建全面的自动化测试套件
    • 保持较短的构建和测试过程
      & A% S1 I/ x$ J& p4 p
  • 必不可少的实践( T+ z9 R- F2 n, P2 U, m7 z% A. z' L
    • 构建失败之后不要提交新代码
    • 提交前在本地运行所有的提交测试,或者让持续集成服务器完成此事
    • 等提交测试通过后再继续工作
    • 回家之前,构建必须处于成功状态
    • 不要将失败的测试注释掉
      ! i- c0 d% P& E+ |) x' M

- f* q$ }; Y4 u2 c* z! K7 J* h% h1 C
: z+ z7 _! T3 ^. c/ c; o
9 e( y- h- P2 ]3 f" I/ D5 W
   自动化测试中的测试替身
1 Q- q# R& ^. ?. u  u0 P
  • 哑对象(dummy object)指那些被传递但不被真正使用的对象,它们通常只用于填充参数列表。
  • 假对象(fake object)是可以真正使用的实现
  • 桩(stub)为每个调用提供一个封装好的响应。
  • 模拟对象(mock)是一种在编程时就设定了它预期要接收的调用。
    * w% }! I: v! E9 N; q6 f' K
0 R* w4 H3 D7 S! g( P+ ?* u8 J
( V& X; [( f6 S* W" L1 T
0 c! v9 L, I& j# S3 L$ I
   提交阶段
& l# j. h+ d  @; j7 n7 z) p$ O8 B# q% k- p
提交阶段是怎样工作的?
8 P& j* ~8 N4 G) e, b/ W7 ~
  • 编译,并在集成后的源代码上运行提交测试。
  • 创建能部署在所有环境中的二进制包
  • 执行必要的分析,检查代码库的健康状况。
  • 创建部署流水线后续阶段需要使用的其他产物。(比如数据库迁移或测试数据)
    / u& E0 L# [: j+ w

5 w7 k. c0 q1 Y, ?
/ ?6 H" @& g8 J2 k1 O. ^$ B

, M$ F) ^$ [! b* o8 t: _* n# l- T提交阶段的首要目标是要么创建可部署的产物,要么快速失败并将失败原因通知给团队。9 j6 o9 B' x, O! y4 U( B6 ^- y; H( g: ~
    5 b! W  f: b6 d! I9 _& z
  • 提交阶段比较有用的度量项
  • 测试覆盖率
  • 重复代码的数量
  • 圈复杂度
  • 输入耦合度和输出耦合度
  • 编译警告的数量
  • 代码风格
  • 提交测试阶段测试套件的原则与实践
  • 避免用户界面 测试困难,耗费时间和精力 速度慢 * 可以放在验收测试节点处理
  • 使用依赖注入
  • 避免使用数据库
  • 在单元测试中避免异步 * 解决方法就是拆分测试,将异步操作拆分单独的单元测试。
  • 使用测试替身 Stub, 常常需要额外写很多代码,我们不需要关心桩是如何被调用的 Mock, 一般通过Mock框架模拟对象,我们需要验证代码是否以期望的方式与模拟对象交互。
  • 最少化测试中的状态
  • 自动化验收测试& R" B$ e/ v2 p( t
  • 窗口驱动器模式,也就是分为测试实现层和窗口驱动层,这样使测试实现层抽象层次更高,只有窗口实现层才与具体的GUI打交道。
  • 我理解的自动化测试是:为了验证用户故事是否满足业务而编写的一系列操作过程,与单元测试不同的是,它是面向业务,而单元测试是面向开发人员的。
  • 如何实现验收测试
    1 Q: m' U- K: G* e, \: p! u
2 [  I$ X, d* Z7 }/ |& r
$ j+ \7 N8 i$ I- f5 G
8 r# f5 ~9 s% {* J  n- D
   分支与合并
8 x3 l2 t) h3 g( G) ]6 w7 F' H* y0 a" z- {
几种常见的分支发布策略:
; `- n' G7 a3 W! P9 x" K
  • 主干开发;说白了,就是所有开发人员都往主干分支上提交代码。
  • 按发布创建分支;即当软件准备发布的时候,才从主干创建分支。
  • 按功能特性分支;应该是当下很多公司比较喜欢使用的一种策略。
  • 按团队分支;比较适合大型团队,为每个团队都创建一个分支。6 ?" W/ h  d( w( M2 M

7 f3 a$ [; j: f
7 O  I. d0 q7 t1 w2 V

9 U( }* T2 b- C" t基于主干开发的三个好处:7 e% X3 X0 v. g. L- K9 `( ~. \
  • 确保所有的代码被持续集成。
  • 确保开发人员及时获得他人的修改。
  • 避免项目后期的“合并地狱”和“集成地狱”。
    ; s. a* y: e6 A& J0 Z0 G
: `0 W3 P3 {2 y6 ^5 w

3 f' X0 C$ B7 L/ @- u% M, }* c) K7 K, q; r9 }2 t$ w+ n
# v$ ]3 s) Q% _
文中指出,“创建分支”与“持续集成”往往是背道而驰的,意味着说创建分支越多,就越难实现持续交付,因为开发人员都在各自的分支频繁提交代码,而“分支”上的代码往往在几天之后(甚至更长的时间)才会合并回主干,这样会导致在后期才会发现因合并代码导致的种种问题。(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|ITIL先锋论坛 ( 粤ICP备11099876号 )|appname

Baidu

GMT+8, 2021-12-2 22:57 , Processed in 0.128677 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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