基于Jenkins分布式调度管理公有云多租户的架构浅谈

基于Jenkins分布式集群管理公有云多租户的架构浅谈

Jenkins简介

Jenkins最开始被称为Hudson,它在持续集成领域的市场份额居于主导地位,是什么使Jenkins如此成功呢?首先,Jenkins拥有良好的扩展性,通过插件能够解决各类场景。其次,Jenkins的开源社区活跃度非常好。

Jenkins分布式构建

  • 基于Jenkins的分布式构建能力,可以解决多租户任务执行统一调度的需求。如上图示,通过Jenkins-master进行所有任务的管理,由agent进行不同租户的任务执行,从而实现分布式构建的能力。
  • Jenkins使用主/从架构来管理分布式构建。主节点(Master)的工作是处理调度构建作业,把构建任务分发到从节点(agent)来进行实际执行,监视从节点,并且记录和发送构建产物。
  • 从节点按照被告知的Jobs,执行主节点分派的构建作业。从节点在远程机器上运行小的Java可执行文件,以及监听来自Jenkins主实例的请求。

演示:

Master IP:1.1.1.1 Agent-tag1 IP:10.1.0.51(模仿租户1) VPC3 IP:10.1.0.55(模仿租户1的集群) Agent-tag2 IP:10.1.0.52(模仿租户2) VPC4 IP:10.1.0.54(模仿租户2的集群)

  • testSlave1该Job只允许在Agent-tag1上执行,Agent-tag1通过Ansible,操作VPC3
  • 此处使用ifconfig命令测试。点击构建后
  • 查看 Console Output,控制台输出如下:
  • 输出了VPC3的ifconfig命令执行结果,即实现了Master通过执行job控制Agent-tag1,使VPC3执行命令。

迈入Jenkins的第一步:准备环境

依赖配置: 2.54 (2017-04) 以上版本: Java 8, 1.612 (2015-05) 以上版本: Java 7

yum -y install java # 默认在Centos7系统上会安装openJDK1.8版本

测试配置是否生效

[jenkins@1.1.1.1 ~]$java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

迈入Jenkins的第二步:安装

使用yum安装,安装步骤如下:

wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum makecache
yum -y install jenkins

默认安装文件的位置:
/etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
/var/lib/jenkins/:默认的JENKINS_HOME。
/var/log/jenkins/jenkins.log:Jenkins日志文件

迈入Jenkins的第三步:启动服务

通过systemctl启动,适用于采用yum安装和RPM安装的Jenkins

systemctl start jenkins  # 启动Jenkins服务
systemctl enable jenkins # 将Jenkins服务加入开机启动项

注意:如果JDK环境变量不在如下所示路径中,请将系统JDK路径加至/etc/init.d/jenkins–>candidates字段中。 使用which java查看java的目录

which java
/usr/java/jdk1.8.0_151/bin/java
vim /etc/init.d/jenkins

candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
# 添加java命令路径
/usr/java/jdk1.8.0_151/bin/java
"

迈入Jenkins的第四步:验证Jenkins是否启动

默认情况下Jenkins使用8080端口,使用netstat -ntlp查看8080端口是否启动

netstat -ntlp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2511/sshd           
tcp6       0      0 :::8080                 :::*                    LISTEN      29373/java          
tcp6       0      0 :::22                   :::*                    LISTEN      2511/sshd 

迈入Jenkins的第五步:登录Jenkins页面

  • 在地址栏输入:1.1.1.1:8080(此处我的虚拟机地址为1.1.1.1),就可以进入jenkins得管理界面。
  • 需要输入初始的密码,初始密码在/var/lib/jenkins/secrets/initialAdminPassword。
  • 选择安装插件(install suggested plugs)
  • 设置管理员账户
  • 大功告成,尽情享用吧

迈入Jenkins的第六步:分布式构建

  • 创建Jenkins从节点(agent),在系统管理–>管理节点,点击新建节点,并配置节点
  1. 重点详解

    1)用法Usage有三个选项:

    • 第一个选项“Utilize this slave as much as possible” 尽可能的使用这个节点,只要该节点变得可用,就告诉Jenkins自由使用这个节点。
    • 第二个选项“Leave this machine for tied jobs only” 只允许运行绑定到这台机器的job,该节点仅保留为特定作业。(此处我们选择该选项)

    2)启动方法

    • 主节点通过ssh启动从节点代理。(Linux环境中,最方便的方式着重描述,此处我们选择该项
    • 使用Java Web Start手工启动从节点代理。(如果服务器不能连接到从节点或者从节点为Windows系统,则使用这种方式;缺点是从节点不能被Jenkins自动启动或者重启)
    • 把从节点代理安装为Windows服务(适用于Windows机器)
    • 直接在从节点命令行启动从节点代理(如果没有可用的用户界面,SSH受限的情况下可以使用)

    3)SSH启动从节点: 主机输入slave的ip地址 Credentials后面的add按钮可以选择用户名+密码形式或者选择采用秘钥形式

    • Host Key Verification Strategy 主机密钥验证策略(Jenkins会找/var/lib/jenkins/.ssh/known_hosts中是否有agent记录)
    • Known hosts file Verification Strategy 已知主机文件验证策略(手动填入私钥)
    • Manually provided key Verification Strategy 手动提供关键的验证策略(此处选择该项)
    • Non verifying Verification Strategy 无验证验证策略(该选项安全性最低,不建议选择)

    4)Available 配置从节点的启动和停止时间

    • Keep this slave agents on-line as much as possiable 尽量保持代理在线,jenkins只需保持运行的从节点并且在需要时使用它。 (此处选择该项)
    • Take this slave on-line when in demand and off-line when idle 有需要时保持代理在线,空闲时离线
    • 根据时刻表让代理上线

    5)环境变量

    • 如果agent采用默认的yum安装openjdk时,不需要添加JAVA_HOME变量路径
    • 如果采用Oracle JDK编译安装,需要添加JAVA_HOME变量路径

    6)点击从节点,点击Launch agent启动新节点。

迈入Jenkins的第七步:创建Jobs

  • 点击新建–>选择“构建一个自由风格的软件项目”
  • 勾选Restrict where this project can be run选项,指定执行Job的Agent
  • 在构建项中选择Execute Shell,在Command中输入要执行的命令
  • 点击项目名称,在左侧选项栏选择立即构建
  • 点击Build History–>Console Output查看构建输出结果