基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前言 在上一篇文章中讨论了容器服务提供的交付能力,在本文中我们将讨论如何从零搭建一个持续交付系统。 对于大多数公司而言,选择一个合适自己的持续交付系统是尤为重要的一件事情,不同的公司、不同的业务使用的场景也各不相同,因此要根据自己的业务场景与发展方向来选择合适的方案。

前言

在上一篇文章中讨论了容器服务提供的交付能力,在本文中我们将讨论如何从零搭建一个持续交付系统。

对于大多数公司而言,选择一个合适自己的持续交付系统是尤为重要的一件事情,不同的公司、不同的业务使用的场景也各不相同,因此要根据自己的业务场景与发展方向来选择合适的方案。根据不同的业务场景与交付方式,阿里云容器服务提供了三种不同的持续交付方案。

基于Jenkins的持续交付方案



20.png

基于Jenkins的持续集成和持续交付方案是所有方案中最灵活、能力最强的方式,但也是需要客户自主运维的方案。对于现有提供持续交付的SaaS服务而言,很难既覆盖简单性与可扩展性。而对于定制化需求明显的开发者而言,开源的Jenkins一直是持续交付系统的第一选择。容器服务为了让开发者可以更简单的使用Jenkins进行容器交付,我们提供了容器服务的Jenkins部署插件,可以直接在构建任务中推送Docker Compose模板到容器集群;提供了Java、C++、Python、Nodejs、Golang等语言的Jenkins Slave,开发者可以直接使用这些Slave快速实现一个分布式集成的持续交付系统。在Slave中内置了简单的容器集成流程,开发者可以通过配置的方式将一个完整的持续集成流程在Slave中运行起来。 

Jenkins的方案是所有方案中,功能最强大的。之所以选择Jenkins作为容器服务支持的开源方案的原因在于:

  1. Jenkins在国内的开发者中认可度较高,很多创业公司的自建持续交付系统的选择大部分都是Jenkins,便于开发者可以在老的系统上直接进行容器化的持续交付。
  2. Jenkins的能力远不止我们上文中提到的这些,良好的开源社区给Jenkins带来的反哺,让Jenkins可以通过插件的方式满足很多系统无法满足的场景,比如对于刚刚使用容器的客户可能会倾向于使用Jenkins的混合发布的方式,即将应用交付到容器服务的同时也交付到远程的虚机上,进行应用的灰度测试,逐步的迁移。
  3. Jenkins拥有良好的扩展性,在开发Jenkins插件的时候,可以发现Jenkins内部实现机制几乎可以通过插件的方式让开发者扩展所需的任何一个位置,对于很多定制化场景而言,这会是选择Jenkins的决定性因素。
  4. Jenkins拥有持续交付系统中最重要的也是最棒的流水线(pipeline)系统,在Jenkins2.0以上的版本中,内置了流水线(pipeline)的支持,这表示了未来Jenkins在持续集成与持续交付领域的发展趋势与能力。

基于CRP的持续交付方案


21.png

CRP是阿里云推出的一款提供持续集成与持续交付功能的SaaS服务。同常见的持续交付系统类似,CRP也提供了一个可扩展的流水线。开发者可以将自己的持续集成与持续交付流程转换为一条DAG图的流水线(pipeline)。比如在本文中提供了一个简单的容器化的持续交付的流水线定义。分为五个阶段:代码检出、集成测试、镜像构建、推送镜像、部署应用。每次提交代码,代码仓库都会触发CRP进行持续集成,运行用户预定义的流水线(pipeline),测试不通过则重新集成,测试通过则开始应用部署。 

这种集成方式的覆盖了高质量和可扩展两个方面,但是CRP作为一个通用的持续交付平台,提供的可扩展性有限、而且测试的基础环境种类有限。对于复杂的多技术栈的微服务系统而言,灵活度不足。但是对于系统技术栈统一、持续交付需求简单的客户而言,CRP是一个值得推荐的方式。

基于Hub的持续交付方案


22.png

基于Hub的持续交付方案是最简单的持续交付方案,开发者无需搭建任何服务,可以直接通过在镜像仓库与容器服务中配置触发器的方式完成应用的自动更新。持续交付的本质是如何可扩展、高质量、快速的进行交付。高扩展就要求持续交付系统有良好的流水线(pipeline)的设计,高质量则要求开发者有覆盖充分的测试脚本以及持续交付系统可以标准化的组织这些脚本并运行,而快速则是这三个要素中最简单的,而基于Hub的方案对于很多场景来讲功能上是有缺欠的,但是在速度上是有优势的。用户提交代码后会自动触发容器hub的镜像自动构建,构建完毕后会触发容器服务的自动重新部署实现应用的更新。

这种方案特别适合在测试环境中快速迭代联调的应用场景,虽然在标准的持续集成中测试是必不可少的一环,但是在实际的开发联调的过程中,全量的自动化测试也会给迭代速度带来一些阻碍,因此如果追求快速迭代并且测试的需求不是很强烈的场中,可以考虑直接使用基于Hub的持续集成方案,简单、高效。

尾声

在上文中,我们介绍了三种不同的持续交付方案,开发者可以根据自己的需求选择其中任意一种从零开始进行容器化的交付之路。但是无论哪种方案,都需要进行取舍,选择最符合业务形态的持续交付系统才是最重要的。

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
使用阿里云容器服务&文件存储NAS构建Jenkins持续集成解决方案
基于阿里云容器服务和文件存储NAS构建自动化持续集成交付环境
|
存储 监控 API
基于容器服务的持续集成与云端交付(二)- 多维度打磨交付能力
前言 在上一篇中,和大家一起讨论了传统软件交付的问题、持续交付的难点、以及为什么云端的容器交付可以协助大家快速的持续交付。 但是当真正的将一个系统通过云端容器交付的时候会发现不能单纯的将Docker作为一种交付工具来对待,更多的时候是作为一个交付平台的基础设施来看待,还需要关心的是使用Docker后网络、存储、安全、性能、监控等等不同方面带来的变革。
1709 0
|
jenkins Java 持续交付
云效(原RDC)+ 容器服务完成持续集成
最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品。 我会把我最近3个月的使用体会分成5个部分:使用RDC的动机、PHP项目集成、JS项目集成、JAVA项目集成、Docker类项目集成这5.
18090 0
|
JavaScript 前端开发 测试技术
基于容器服务的持续集成与云端交付(四)- 多种发布方式
前言 哲学有各种各样的流派,百家争鸣,但是只有一个哲学问题是严肃的,那就是生与死。而云端交付过程中也只有三个问题是严肃的。 如何重建你的系统 How to recreate your system? 如何安全地部署你的系统 How to safely change your system? 部署后的问题监控与解决 When something has gone wrong? 在前面的文章中,我们讲述了什么是云端交付,如何搭建从零搭建一个持续交付系统,而今天我们要谈的是如何安全的部署你的系统,部署这个名词包含了很多的含义,最简单的解释就是如何让你的程序运行在最终的环境上。
3915 0
|
运维 测试技术 持续交付
基于容器服务的持续集成与云端交付(一)- 交付之禅
前言 随着微服务架构与容器虚拟化技术的发展,持续集成与持续交付的概念又重新回到了大家的视野,越来越多的公司开始使用持续集成的系统来解决频繁发布带来的质量问题;使用持续交付的工具来实现代码在不同环境上的自动部署。
3846 0
|
jenkins Shell 持续交付
使用阿里云容器服务Jenkins 2.0实现持续集成之the tag you want篇(updated on 2017.09.06)
为了简洁起见,本文将上述两种能力在一个持续集成场景中进行运用。整个场景是,在代码中增加环境变量配置文件,代码变更触发自动构建,打包代码,构建镜像(用git SHA和构建时间tag image),推送镜像,使用环境变量文件和compose模板来部署应用到阿里云容器服务。
9626 0
|
jenkins 测试技术 持续交付
使用阿里云容器服务Jenkins 2.0实现持续集成之Pipeline篇(updated on 2016.12.23)
本文将用java web源代码来演示一个Pipeline项目如何优雅地实现代码提交触发测试,war包打包,测试结果展示,war包本地存储以及上传OSS,构建镜像,部署应用,邮件推送结果的持续交付方案。 在最后一部分,我们将介绍动态生成slave,执行job,销毁slave。
40640 0

相关产品

  • 容器计算服务