阿里云云原生架构实践
上QQ阅读APP看书,第一时间看更新

1.2.1 重塑研发流水线

具备持续发布的能力,是众多软件企业的目标之一,但持续发布需要面临诸多挑战,例如配置基线、版本管理和自动化等。特别是当应用具有多个不同的硬件环境、OS或者第三方软件/库依赖的多个组合时,如何进行有效的变更管理才能保证任何微小的变化都不会使这些组合出现错误呢?我们经常遇到的问题之一就是,开发人员在本地环境中运行和测试时都是正常的,但是一旦部署到测试或者生产环境中,就会因为依赖的第三方软件或库的配置问题,导致软件不能正常工作。

容器可用于对制品进行打包和分发,即结合GitOps和不可变基础设施,可以实现软件运行环境的整体化部署。换句话说,对运行环境的任何变更,都必须提交到Git中,经过版本管理后重新持续集成,形成新版本的制品并进行部署。这样做的好处是,关于软件运行环境的所有变更都有迹可循。任何时候我们都可以查找(checkout)需要的版本,通过脚本构建出对应的制品。如果代码和脚本本身没有错误,那么整个构建过程就会非常顺利,并且是可重复的。如果某次变更后软件运行出现异常,可直接根据Git上的记录回溯到上一次正常运行的版本,重新进行部署。

整个过程不仅高度自动化,而且具备版本跟踪和回溯机制,也解决了上文提到的持续发布的挑战问题,减少了CI/CD中的错误发生概率,从而提升了整体的质量和效率。这样的研发流水线,虽然不一定具备7×24的发布能力,但也可以在软件实现新的功能后马上基于某个基线连续自动发布或者回滚。