作者:李佩京
时间:2017-12-28
基于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版本
测试配置是否生效
[[email protected] ~]$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)用法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查看构建输出结果