数人云:Docker是CI/CD的早期采用者,经过利用如GIT等源代码控制机制的正确集成,Jenkins能够在开发者每次提交代码时启动构建过程,此过程生成新的Docker镜像,能够在整个环境中当即生效,所以团队能够快速构建共享和部署应用。服务器
用途:根据开发需求,自动配置环境及基础设施,并配备拥有自助服务的自动化工具。运维
CI是一种开发实践,开发者天天将代码集成到共享存储库中几回,支持将新功能与现有代码集成在一块儿,此集成的代码还能够确保运行时环境中没有错误,容许检查它与其余变动的反应。工具
目前用于CI最流行的工具是“Jenkins”,GIT用于源代码控制存储库,Jenkins能够从GIT存储库中提取最新的代码修订,并生成能够部署到服务器上的构建版本。单元测试
持续交付是指在给定的时间内将软件部署到任何环境的能力,包括二进制文件、配置和环境变动。测试
持续部署是开发团队在短周期内发布应用的一种方法,开发人员所作的任何变动都会被部署到生产环境中。优化
Docker是一个容器化平台,以容器的形式将应用及全部依赖项打包在一块儿,确保应用可以在任何环境中无缝地工做。spa
Docker能够帮助开发者构建代码并在任何环境中进行测试,以便尽早地在开发生命周期中获取BUG。Docker的优点在于:帮助简化流程、节省构建时间、并容许开发者并行地运行测试。版本控制
Docker还能够集成源代码控制管理工具,如GitHub和Jenkins等集成工具,开发者将代码提交到GitHub,测试使用Jenkins建立影响自动触发构建的代码,能够将此影响添加到Docker registry,以处理不一样环境类型之间的不一致。生命周期
没有Docker参与的典型CI:开发
开发者将代码提交到存储库,这些代码一般会在持续集成服务器上触发构建,构建过程可能会根据所构建的应用而不一样,通常状况下,能够进行编译、运行测试用例、构建应用,而后将应用部署到服务器中。
经过Docker进行的CI:
在CI过程当中安装Docker的方法是让CI服务器在构建应用后再构建Docker镜像,应用进入镜像内部,将镜像推到Docker Hub,在另外一台主机上或QA/DEV/生产环境,从Docker Hub提取即将完成的构建,并运行应用的容器,在CI服务器中,甚至能够将编译和测试做为镜像构建的一部分运行。
本文做者有多年的持续部署(CD)经验,帮助不少公司实践及优化CD,如下是一些关于CI/CD的经验及建议:
虽然使用工具听起来很日常,但仍有一些公司没有使用工具,这对公司或我的没有益处,推荐使用Circle相似的工具,工做流方面也应该有必定的工具使用规划。
需时刻提醒团队成员,持续部署只是应用于部署的持续集成,所以须要良好的单元测试覆盖率,若是尚未一个坚实的单元测试和持续集成的基础,那就是准备尚不完善。
BUG和回滚是不可避免的,经过查看生产中的数据,将系统放在适合的位置,能够知道什么时候进行了回滚或BUG传递,将其绑定到自动化回滚,所以若是有关键功能或指标出错,那么CD系统会自动回滚到稳定版本。
选择相信团队成员,容忍开发人员的错误,在认为合适的时候进行部署,并互相检查代码,将持续部署与分层权限的区域性结合在一块儿。
与上面所说的团队信任相似,团队应该检查代码变动,选择最有资格和洞察力的人去检查开发人员的代码。
没有成功地过分到持续部署的公司最多见的问题是开发团队是独立的,开发和运维应该在适合的时候互相参与到对方的工做当中,要让开发团队深刻参与CD基础设施的建设和规划。
团队须要不断地反馈,把测试目标看作是在正确的时间得到正确的反馈,所以在部署时才能知道什么是有效或错误的,越早发现BUG,就越容易修复,持续部署作的极好的公司都会有全面的单元测试和集成测试覆盖率。
持续测试也是一种开发实践,在一天的测试计划中,开发须要不断地将代码集成到共享存储库中,为了让开发团队可以检测出问题,自动化构建能够用来验证每一个测试,若不遵循连续的方式,那么集成和修复BUG会消耗更长的时间。
为了提升应用开发过程的敏捷性,在企业中使用Docker简化和稳定了CI/CD,Docker容器的轻量级特性使其快速运转,并有助于快速测试,而且可使用可重复的流程,建立相似环境产品。