jenkins 集成rancher

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins 集成rancher相关的知识,希望对你有一定的参考价值。

参考技术A 当下最热门的技术当属以docker为代表的容器技术,rancher是用来管理docker的一个平台,可以在rancher上对docker进行监控,发布,编排,升级,负载均衡等。和docker命令行操作比起来,rancher全都是可视化操作,学习成本极低,通过rancher可以非常方便对docker进行管理。
通过rancher发布的应用,就很有必要跟jenkins进行集成,实现整个pipeline的完整性。本文介绍如何在jenkins中集成rancher,达到自动发布自动升级的目的。
rancher 最近进行大版本升级,目前最新版本为rancher 2.0 beta 4,该版本bug还比较多,暂不考虑应用生产环境,本次使用环境为rancher 1.6

jenkins和rancher的集成相对还是比较简单,就是官方文档写的有点简略,没有解释各个参数从哪里取,真心觉得,官方能在文档上多写几个字可以让用的人少走很多很多弯路。

基于 Rancher 的企业 CICD 环境搭建

CI(Continuous Integration)持续集成,CD(Continuous Delivery) 持续交付(当然也有叫 Continuous Deployment)通常会采用一些软件如Jenkins、Drone、Travis、Gocd等来辅助我们。它们能够与Git SVN等代码管理仓库集成,帮助我们实现一些自动化任务。


CI/CD软件很多,再加上代码仓库不同,外加上业务流程的复杂度和不同开发语言的特性,会产生千变万化的组合。可以说CI/CD本身就是一个很大的话题,正所谓一千个人眼中就有一千个哈姆雷特,所以我们这次分享主要还是关注在与Rancher结合方面。


下面我们就以jenkins为例,看Rancher如何与其集成。


首先我们可以想到,对于一个CI/CD环境,Rancher可以提供什么?


  • 快速部署jenkins

  • 环境隔离/用户管理

  • 基于Rancher compose进行应用编排

  • 提供外部访问入口


Rancher的Catalog中提供了jenkins部署的样板: 


技术分享


左侧是jenkins-ci server,右侧是swam-plugin,这两个可以组成一个master/slave模式的集群。


尝试性的部署后,可以看到类似这样的效果:


技术分享


选用jenkins-swarm-plugin组成slave节点, 这样我们可以在jenkins跑任务时能够和docker进行更好的集成 。


构建完毕后,可以在jenkins中看到集群状况:


技术分享


那么使用jenkins来做CI是一种怎样的表现模式呢? 我们来通过一张图来看下:


技术分享


开发人员 push commit后,代码仓库收到提交信息。这时可以通过仓库自带的hook来触发jenkins build。也可以通过jenkins的自poll来获取最新代码。然后jenkins就自动执行你所设定的各种任务脚本。


插播一句,关于触发jenkins build 的几种方式:


  • Post commit hook (git原生hook)

  • Webhook (github/gitlab都支持,需要hook的server端接收请求

  • Jenkins有相应的plugin)

  • Build periodically / Poll SCM


CI的过程根据业务的复杂程度,各有不同,一般情况下分为这几步:


技术分享


运行测试用例—编译lib—制作docker镜像并push到仓库—ranchercompose 部署服务。


通常我们可以把 rancher-compose 的file直接写在代码project中,这样jenkins可以直接读取到,并执行rancher-compose执行部署服务。


在执行rancher-compose时,可以考虑下面两种策略:


  • 每次根据jenkins的<buid_num>来创建新的stack

  • Rancher-compose --force-upgrade --pull 拉取最新镜像并强制升级 


在rancher-compose 执行完毕后,通常交付一个对外访问的ip:port,但是这个访问地址一般来说不是固定的,所以我们的业务服务部署完毕后,自动绑定dns,是一个非常好的体验。


技术分享


sync-service 可以将app-service的服务地址在dns中添加A记录,这样我们只需记住dns,就可以直接看到CD后的业务服务。这里的dns-server 最好是可以支持SRV Record,关于SRV Record,大家可以理解为类似AWS Route53的功能。


关于如何取出服务地址并自动添加DNS记录的原理,可以参考我之前的一篇文章:http://blog.neunn.com/wordpress/?p=276 文中第三部分有详细描述。


Q & A


Q:你刚才提到「在执行rancher-compose时,可以考虑下面两种策略:每次根据jenkins的<buid_num>来创建新的stack」。这种方式可以用DNS么?如果用的话,转发到哪个stack上?

A:默认情况下 <stack.name>.<env.name>.<root_domain>,你也可以特殊制定一个dns前缀<special_name>.<root_domain>


Q:jenkins里只能有一个ENV-*?

A:可以在env下部署多个jenkins,但是考虑企业内部不同部门不同业务要进行隔离,所以建议每个env一套jenkins。


原文来源:Rancher Labs


本文出自 “12452495” 博客,请务必保留此出处http://12462495.blog.51cto.com/12452495/1910967

以上是关于jenkins 集成rancher的主要内容,如果未能解决你的问题,请参考以下文章

jenkins 集成rancher

12.Jenkins持续集成企业实战

Jenkins——持续集成介绍及Jenkins安装部署(插件+用户权限+凭据+Maven打包)

Jenkins持续集成

Jmeter+Jenkins持续集成(三集成到Jenkins)

Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)