k8s结合jenkins部署docker项目

jenkins的可伸缩部署方式,一种是基于Docker(或者docker-swarm 集群)的部署方式,另外一种是基于kubernetes的部署方式。

由于基于kubernetes也是基于docker的,都需要用到docker进行通信和中转,因此使用同一的slave镜像将大大节省平台开发与维护成本,因此需要引入jenkins的另一个大插件pipeline。Pipeline也是jenkins 2.0以后的主要方向和升级。

jenkins介绍及传统部署遇到的问题

Jenkins 是开源的一套持续集成框架,可以进行大规模的编译、测试和发布的工作,给软件开发团队带来极大的便利性。

Jenkins 的持续集成环境可以是集群化的,主要的运行模式为master-slave模式。

Jenkins 的master为Jenkins系统的控制节点,slave节点负责具体的项目编译测试等工作。

由于大公司里面需要进行编译的工程或者对象非常庞大,因此需要大量的物理节点作为slave,而且这些环节相对固定,可能很难适应其他项目的编译测试,一旦salve节点遭到破坏,需要人为的进行修复甚至重建,非常麻烦。

Docker 来解决问题

Docker的问世,为我们提供了解决方案,使用docker作为jenkins slave节点可以解决slave节点遭到破坏后遇到的问题, 而且大量的工程不是每时每刻同时运行的因此可以在需要时吧docker拉起来进行编译测试,这样就节约了大量的物理节点, 解决了上述问题。

然而使用docker 同样需要集群,因此要用到集群管理工具, swarm 或者kubernetes。Swarm 一般用在小集群上,而且swarm和docker本身的接口完全一致, 因此这里就简单介绍单点docker节点作为slave。 Kubernetes作为大的docker 集群管理工具,当jenkins的工程数量非常大的时候可以用kubernetes, kubernetes的运维相对比docker 和swarm的门槛要高一点。

Jenkins master也可以使用docker来运行或者使用kubernetes来提供高可用的jenkins master。本文不对jenkins master的安装和docker运行做过多的说明。

kubernetes 管理Jenkins slave

Kubernetes 主要是用来进行docker 调度运行的,同样因为这一点通过kubernetes插件的配置,不需要管slave节点是否在线,因为kubernetes帮你负责创建和连接。这样就可以做到没有任务的时候没有任务slave节点在线,做到完全的按需启动slave和调度slave。

使用kubernetes 部署管理的jenkins slave如下:

Jenkins master 的部署

1)物理机上安装步骤见上篇随笔

2)使用docker安装运行

docker search jenkins
docker pull jenkins/jenkins:lts 
docker images  查看拉取的镜像
mkdir /home/jenkins_home  #创建一个jenkins目录

#启动jenkins容器
docker run -d --name jenkins_01 -p 8080:8080 -v /home/jenkins_01:/home/jenkins_01 jenkins/jenkins:lts ;

https://hub.docker.com/_/jenkins/  可以下载到jenkins master镜像

jenkins系统初始化安装插件

首先配置涉及站点,默认的是 官方的:http://updates.jenkins-ci.org/update-center.json

也可以配置日本的或者俄罗斯的 http://mirror.esuni.jp/jenkins/updates/update-center.json

http://mirror.yandex.ru/mirrors/jenkins/updates/update-center.json

配置完以后必须点右下角的立即获取

也可以在可选插件哪个页面的下面点击获取。

我们这里需要找的是kubernetes的插件和docker的插件进行安装,如果安装过程中有些插件安装失败,则手动下载插 件然后再高级里面选择上传插件进行安装:

 

 

使用docker运行jenkins slave并连接到master 

Jenkins master 连接slave 有两种模式,一直是master主动发起连接,主要通过ssh 来进行连接,另外一种是slave 主动连接master,使用的jnlp协议

我们使用docker来运行jenkins slave 都可以,但是要做到没有任务在编译测试的时候没有slave在线  则只能通过 jnlp来进行连接而去必须使用kubernetes来调度。

我们这里讨论的是使用单独的或者几个slave长期在线,进行项目的编译测试,都是由master发起连接的。

https://hub.docker.com/u/jenkinsci/    slave镜像下载地址上

 

docker 运行jenkins slave (ssh 模式)

这种模式docker 运行一个slave 容器跟普通物理机使用完全一致,这里不做说明。

同样可以再在同一个slave节点(docker 容器)上绑定很多个工程或者任务。

 

docker jenkins slave (jnlp 模式)

Jnlp 模式的则相对应用的比较少,jnlp 是由jenkins slave节点(物理节点,虚机或者容器均可)发起连接的, 会根据配置的jenkins master的url , Jenkins连接的token和jenkins slave name( lable)来进行进行连接。

 

举个例子:

登录jenkins-->系统管理-->节点管理-->新建节点

那么slave 进行运行连接的时候4个参数是:

1.      –url

2.      http://172.25.8.10:9080

3.     54cf091374806d8db7b9cd3977e23d080c955fa6fa33dd6c33dd594aa7b79350

4.    jnlp_test

Jenkins-slave –url http://172.25.8.10:8090 54cf091374806d8db7b9cd3977e23d080c955fa6fa33dd6c33dd594aa7b79350 jnlp_test

 

posted on 2020-06-24 16:58  lanist  阅读(1792)  评论(0编辑  收藏  举报