1 Jenkins的Master-Slave分布式构建

1.1 什么是Master-Slave分布式构建?

什么是Master-Slave分布式构建.png

  • Jenkins的Master-Slave分布式构建,就是通过将构建过程分配到从属Slave节点上,从而减轻Master节点的压力,而且可以同时构建多个,有点类似负载均衡的概念。

1.2 如何实现Master-Slave分布式构建?

1.2.1 开启代理程序的TCP端口

  • Manage Jenkins—>Configure Global Security。

开启代理程序的TCP端口.png

1.2.2 新建节点

  • Manage Jenkins—>Manage Nodes and Clouds—>新建节点。

新建节点.png

新建节点2.png

  • 将192.168.18.102作为从节点,需要创建一个目录作为Jenkins的从节点的远程目录:
  1. mkdir -pv /root/jenkins

新建节点3.png

新建节点4.png

  • 在从节点输入命令:
  1. # 在agent.jar所在的目录中输入此命令
  2. java -jar agent.jar -jnlpUrl http://192.168.209.101:8888/computer/slave1/jenkins-agent.jnlp -secret 3e49deb4948fa893a77c0f5d4cc97e732a5fbb53dad73884e01763541608bc3e -workDir "/root/jenkins"

新建节点5.png

1.3 测试节点是否可用

1.3.1 新建自由风格的项目

测试节点是否可用之新建自由风格的项目.png

1.3.2 限制项目的运行节点中输入slave1

测试节点是否可用之项目项目的运行节点中输入slave1.png

1.3.3 配置源码管理

测试节点是否可用之配置源码管理.png

1.3.4 点击构建

测试节点是否可用之点击构建.png

2 kubernetes实现Master-Slave分布式构建方案

2.1 传统Jenkins的Master-Slave方案的缺陷

  • Master节点发生单点故障时,整个流程都不可用了。
  • 每个Slave节点的配置环境不一样,来完成不同语言的编译打包等操作,但是这些差异化的配置导致管理起来很不方便,维护起来也非常费劲。
  • 资源分配不均衡,有的Slave节点要运行的Job出现排队等待,而有的Slave节点处于空闲装填。
  • 资源浪费,每台Slave节点可能是实体机或是虚拟机,当Slave节点处于空闲状态的时候,也不会完全释放掉资源。
  • ……

2.2 kubernetes+Docker+Jenkins持续集成架构图

kubernetes+Docker+Jenkins持续集成架构图.png

kubernetes+Docker+Jenkins持续集成架构图2.png

  • 大致工作流程:手动/自动构建—>Jenkins调用k8s的API—>动态生成Jenkins Slave Pod—> Slave Pod拉取Git代码/编译/打包镜像—>推送到镜像仓库Harbor—>Slave工作完成,Pod自动销毁—>部署到测试或生产的kubernetes平台(完全自动化,无需人工干预)。

2.3 kubernetes+Docker+Jenkins持续集成的好处

  • 基于kubernetes构建Jenkins持续集成平台(上) - 图14服务高可用:当Jenkins Master出现故障时,kubernetes会自动创建一个新的Jenkins Master容器,并且将Volume分配给新创建的容器,保证数据不丢失,从而达到集群服务高可用。
  • 基于kubernetes构建Jenkins持续集成平台(上) - 图15动态伸缩、合理使用资源:每次运行Job时,会自动创建一个Jenkins Slave,Job完成后,Slave自动注销并删除容器,资源释放,而且kubernetes会根据每个资源的使用情况,动态分配Slave到空闲的节点上创建,降低出现因为某些节点资源利用率高,还排队等待该节点的情况。
  • 基于kubernetes构建Jenkins持续集成平台(上) - 图16扩展性好:当kubernetes集群的资源严重不足而导致Job排队等待的时候,可以很容易的添加一个kubernetes Node到集群中,从而实现扩展。

3 kubernetes的安装

3.1 安装环境说明

主机名称 IP地址 安装的软件
k8s-master 192.168.18.100 k8s的主节点
k8s-node1 192.168.18.101 k8s的从节点
k8s-node2 192.168.18.102 k8s的从节点
代码托管仓库 192.168.18.103 Gitlab
Docker仓库服务器 192.168.18.104 Harbor

3.2 安装kubernetes

转载 https://www.yuque.com/fairy-era/yg511q/kacccp