ContinuousDelivery如果要构建持续交付流水线,首先要考虑多环境的问题。通常一个应用会有多个环境,比如开发环境、集成测试环境、系统测试环境、用户验收测试环境、类生产环境、生产环境。对于如何在OpenShift中为这些环境隔离和建立部署流程,有多种选择。在同一个项目中使用标签和***名来区分不同的环境;集群中的不同项目以隔离环境;跨集群隔离环境。下面以第二种方式为例来演示多环境管理问题。在上图中,我们有一个构建项目。buildproject包含一组相互依赖性强的应用,每个应用对应一个buildconfig,生成的ImageStream存放在imageregister中。每个环境对应一个项目,其中包含应用的部署配置,其图像输入是构建配置生成的图像流。这样做的原因是出于以下考虑:不同的环境分布在不同的项目中,可以利用项目的特点对环境进行隔离。比如sys项目的容器只能部署在标签为sys的节点上,prod项目的容器只能部署在标签为prod的节点上。不同的项目可以单独定义权限访问和控制。比如只有QA可以操作sys项目中的资源,运维工程师可以操作prod项目中的资源。不同环境共享一个ImageStream,保证应用镜像在不同环境下完全一致,避免因测试环境和生产环境不一致而引入缺陷。那么大家共享同一个ImageStream,如何实现应用的推广呢?解决方案是使用标签。如上图所示,一个镜像流中存在多个版本的镜像,OpenShift可以为版本添加自定义标签。在不同的项目中,我们配置图片来源为“ImageStreamTag”,名称为“applicationName:environmentName”。例如sys项目的镜像名称为“App1:sys”,prod项目的镜像名称为“App1:prod”。如果要将版本3的镜像推送到sys环境,只需要简单的给版本3的镜像打上sys标签,这样在部署sys环境的时候就会自动使用版本3的镜像。octagApp1:latestApp1:sys如果在DeploymentConfig中配置了自动监听tag变化,一旦修改了ImageStreamtag,就会自动触发对应环境的部署。由于应用程序镜像在不同环境中是一致的,所以变化的部分被抽象到外部配置中。如何根据不同的环境加载相应的外部配置?有很多方法可以实现它。下面是使用SpringCloudConfig的解决方案。首先,我们将不同环境的配置放在一个git仓库中,然后通过SpringCloudConfigServer将其转换为http服务。而我们在应用中嵌入了SpringCloudConfigClient,它会接收一个环境变量来拉取指定环境的配置。而这个环境变量可以通过DeploymentConfig注入。ocenvdc/sysPROFILE=sys使用SpringCloudConfig为我们提供了更大的灵活性。我们可以选择在应用首次启动时拉取配置,或者设置配置定时自动更新,实现热更新。尽管OpenShift提供了构建和部署的能力,但我们有时需要使用Jenkins等工具来可视化和编排整个流水线。由于OpenShift是一个容器化的管理平台,我们也可以将Jenkins作为一个应用程序集成到OpenShift中进行托管,这样Jenkins的Master和Slave都是容器化的。OpenShift官方提供了Jenkins2.0镜像,预装了OpenShiftpipeline插件,可以轻松构建和部署。生产环境部署OpenShift在生产环境的部署默认是滚动的。每次部署时,启动一个新的ReplicaController,部署一个pod,然后切割旧的ReplicaController的pod,以此类推,直到销毁旧的ReplicaController中的所有pod,并将新的Replica的所有pod销毁控制器全部在线。整个过程保证服务不会宕机,流量切换顺畅,用户不会察觉。有时部署场景更负责任。比如我们想在产品环境中对新版本做一个完整的PVT(产品版本测试),然后再切换到新版本。然后就可以使用蓝绿部署方式了。蓝绿部署方案的关键点是一个Router对应两个Service。Route作为对外暴露的服务端口,保持不变。这两个服务分别对应我们的生产蓝环境和生产绿环境。同时,只有一个Service可以访问Router的对外服务,另一个Service用于PVT测试。交换可以简单地修改路由器的配置。port:targetPort:app-blue-httpto:kind:Servicename:app-blue结论OpenShift在应用构建和部署方面为我们提供了大量开箱即用的功能和解决方案,所以不再如此难以实现持续交付。我们可以把更多的精力花在提高应用程序质量和架构上,以交付更好的产品。【本文为专栏作者“ThoughtWorks”原创稿件,微信公众号:Thinkworker,转载请联系原作者】点此查看该作者更多好文
