构建DevOps落地的自动化持续交付流水线

一个典型的DevOps流程涵盖需求、计划、编码、构建、测试、发布、运营等多个环节,DevOps通过增强团队间的协助和沟通,构建自动化持续交付流水线,达到快速交付和安全可控的目的。

现代化的应用架构,尤其是微服务应用架构,基本都是分布式的应用架构。分布式架构会带来交付和运维的复杂性,增加交付和运维的难度。容器技术可以使软件交付标准化,容器技术可以满足分布式应用交付的需求。

DevOps落地过程中,最关键的,也是最大挑战的是构建自动化持续交付流水线。自动化持续交付流水线涉及到代码管理(代码提交、代码静态分析、编译、构建、打包、单元测试等)、代码集成、部署、发布等环节,涉及到的工具主要包括代码管理工具、CI等。

代码管理工具主要有2类:

1、集中式代码管理工具,如CVS、SVN、ClearCase、VSS等,最大的缺点是必须联网,无法单机工作。

2、分布式代码管理工具,如Git,每个计算机都是一个完整的仓库,可以离线工作。

Git的主要工作流有三种:

1、Git flow,长期存在2个长期分支(主分支Master、开发分支Develop)和三种短期分支(功能分支feature、补丁分支hotfix、预发分支release branch),基于版本发布,不适合“持续发布”模式。

2、GitHub flow,只有1个长期分支(主分支Master),特别适合“持续发布”模式。

3、GitLab flow,结合2者优点,只保留一个主分支Master,采用“上游优先”原则,开发环境分支是Master,预发环境和生产环境都是下游分支。


持续集成离不开CI工具,CI工具的功能需要对源代码控制系统(如git)、依赖管理工具(如Maven、Gem)、各类测试(如单元测试、集成测试、功能测试、自动化测试)进行支持。

传统的CI工具包括第一个正规的CI工具CC,最早是2001年推出的CruiseControl,2004年Sun的川口浩介开发了Hudson,被Oracle收购后,川口浩介继续开发了Jenkins,并在2013年后成为最流行的CI工具。其他的CI包括JetBrains的TeamCity,Atlassian的Bamboo等。

因为移动应用的特殊性,移动应用客户端千差万别,难于做集中化的测试,而且移动应用的发布方式需要漫长而繁琐的审核,用于移动应用的CI工具有别于传统CI。移动应用通常借助如TestFairy、TestFlight等CI工具,将版本发布给Beta测试人员。


持续交付的关键是自动化,包括:

1、自动化构建和打包。

2、自动化持续集成。

3、自动化测试。

4、自动化部署。

5、自动化生产部署。

在持续交付环境中,经常需要对环境(如生产环境和开发、测试环境)进行构建和拆除,因此使用云服务的环境可以提高环境使用的灵活性和敏捷性。环境管理工具包括:

1、配置管理工具,如:Pupper、Chef、Ansible、Salt等。

2、环境建模工具,如:Vagrant、Terraform等。


持续交付的最佳实践包括:

1、实现监控,实时监控应用,追踪应用的关键度量。

2、实现回滚,这是最后的安全网。

3、提取特异于环境的配置。

4、执行金丝雀发布。

5、记录审计信息。

6、实现功能开关。

7、基于云的基础架构。

(2017-11-26)

你可能感兴趣的:(构建DevOps落地的自动化持续交付流水线)