Jenkins 进阶篇 - 节点配置
当我们使用 Jenkins 构建的项目达到一定规模后,一个 Jenkins 服务可能承受不了负载,会导致很多的构建任务堆积,严重的话还会拖垮这台服务器,导致上面的服务无法使用。例如我们公司目前在 Jenkins 上要构建的项目多达百个,开发环境需要构建部署,测试环境需要构建部署,甚至正式环境也是,开发环境的部署构建频率是最高的,我们目前的做法是每一个代码的提交都会触发构建操作,单个 Jenkins 已经满足不了频繁的构建的要求了,这时候就需要增加我们 Jenkins 的构建节点,由主节点自己进行调度,将构建任务分配到不同的节点。
这里可能有人会问,我们的项目有必要这么频繁的构建部署吗?答案是肯定的,在持续交付里面有一个理念就是快速的交付可用的产品,要想快速的交付,肯定就免不了需要频繁的构建。一个研发团队能做到短平快的交付才是正常的,是研发效能高的表现。试想一下,现在还有哪个互联网研发团队,一年半载才交付一次产品呢。
配置 Jenkins 的节点也比较简单,准备好要作为 Jenkins 构建节点的服务器,同时要确保服务器上有 git 和构建项目需要的各个工具。例如 Java 栈,就需要确保节点机器上有 JDK、Maven 和 Gradle 等。构建需要的工具可以不用到节点机器上去单独安装,我们可以在 Jenkins 主节点上配置需要的构建工具。
例如我这里在 Jenkins 主节点上,【全局工具配置】里面增加了一个 JDK 工具:

然后去到 Jenkins 的【系统管理】下面的【节点管理】里面,进行【新建节点】:

全部设置如下图:

需要注意的是设置一个工作目录,我这里是 /home/jenkins/jenkins_node_work_dir,否则 Jenkins 节点上的一些文件就会在用户的 home 目录。【用法】这里选择【只允许运行绑定到这台机器的Job】,如果各个项目的构建方式相同,你可以选择【尽可能的使用该节点】,两者的区别在于机器的环境差异,如果我要构建一个 nodejs 项目,但是只有 A 节点才有 nodejs 环境,那么就要将 nodejs 项目的构建任务绑定到 A 节点,否则其他机器没有 nodejs 环境是没法构建项目的,同理如果项目必须要在 Mac 系统上构建,那么节点也必须是 Mac 系统才行,推荐的设置是将其设置为【尽可能的使用该节点】,如果某些构建任务需要用到特定的构建节点,在该各自的任务上设置即可。这样的好处是既可以让 Jenkins 根据各个节点的负载情况自行调度使用闲置机器来构建各个节点都能构建的任务,又可以让特定任务绑定在特定的节点上构建。
节点添加好后我们来验证下看看能否正常使用。去到我们之前创建的 jenkins-freestyle-test-task 任务进行如下下设置,如果没有新建一个自由风格的任务:

然后我们连续多次点击【立即构建】就会出现如下效果,该任务在并行构建,并且是多个节点在并行构建:


如果你想让任务绑定到特定的节点上运行,可以在任务的设置里面配置【限制项目的运行节点】,如果有多个节点可以运行该任务可以用或符号连接,例如我这里是 jenkins-node-192.168.31.200 || master,表示这个任务可以在这两个节点上运行,至于具体怎么调度,Jenkins 自己会做选择,我们不用操心。

到此我们 Jenkins 节点的配置就完成了,如果你有多的闲置机器可以按照介绍的方式都添加上来,提高 Jenkins 的构建能力,多一台机器那么构建能力理论上就增加一倍。
随便我们也看看节点机器上的工作目录有什么变化:

刚添加好节点,会产生这些文件。
[jenkins@asus-centos jenkins_node_work_dir]$ pwd
/home/jenkins/jenkins_node_work_dir
[jenkins@asus-centos jenkins_node_work_dir]$ ls -lah
总用量 1.5M
drwxrwxr-x. 3 jenkins jenkins 42 3月 14 19:54 .
drwx------. 8 jenkins jenkins 189 3月 14 19:54 ..
drwxrwxr-x. 4 jenkins jenkins 34 3月 14 19:54 remoting
-rw-rw-r--. 1 jenkins jenkins 1.5M 3月 14 19:54 remoting.jar
当构建任务被分配到该节点进行构建时产生的文件,workspace 是任务构建目录,和 Jenkins 安装目录下的 workspace 目录一样。tools 目时构建用到的工具目录,例如用到JDK。
总用量 1.5M
drwxrwxr-x. 5 jenkins jenkins 72 3月 14 19:57 .
drwx------. 8 jenkins jenkins 189 3月 14 19:54 ..
drwxrwxr-x. 4 jenkins jenkins 34 3月 14 19:54 remoting
-rw-rw-r--. 1 jenkins jenkins 1.5M 3月 14 19:54 remoting.jar
drwxrwxr-x. 3 jenkins jenkins 30 3月 14 19:57 tools
drwxrwxr-x. 3 jenkins jenkins 27 3月 14 19:57 workspace
[jenkins@asus-centos jenkins_node_work_dir]$ ls tools/ -lah
总用量 0
drwxrwxr-x. 3 jenkins jenkins 30 3月 14 19:57 .
drwxrwxr-x. 5 jenkins jenkins 72 3月 14 19:57 ..
drwxrwxr-x. 3 jenkins jenkins 18 3月 14 19:57 hudson.model.JDK
[jenkins@asus-centos jenkins_node_work_dir]$ ls tools/hudson.model.JDK/ -lah
总用量 0
drwxrwxr-x. 3 jenkins jenkins 18 3月 14 19:57 .
drwxrwxr-x. 3 jenkins jenkins 30 3月 14 19:57 ..
drwxrwxr-x. 7 jenkins jenkins 271 3月 14 19:58 JDK8
[jenkins@asus-centos jenkins_node_work_dir]$ ls tools/hudson.model.JDK/JDK8/ -lah
总用量 26M
drwxrwxr-x. 7 jenkins jenkins 271 3月 14 19:58 .
drwxrwxr-x. 3 jenkins jenkins 18 3月 14 19:57 ..
drwxr-xr-x. 2 jenkins jenkins 4.0K 7月 4 2019 bin
-r--r--r--. 1 jenkins jenkins 3.2K 7月 4 2019 COPYRIGHT
drwxr-xr-x. 3 jenkins jenkins 132 7月 4 2019 include
-rw-rw-r--. 1 jenkins jenkins 17 3月 14 19:58 .installedByHudson
-rw-r--r--. 1 jenkins jenkins 5.0M 6月 12 2019 javafx-src.zip
drwxr-xr-x. 5 jenkins jenkins 185 7月 4 2019 jre
drwxr-xr-x. 5 jenkins jenkins 245 7月 4 2019 lib
-r--r--r--. 1 jenkins jenkins 44 7月 4 2019 LICENSE
drwxr-xr-x. 4 jenkins jenkins 47 7月 4 2019 man
-r--r--r--. 1 jenkins jenkins 159 7月 4 2019 README.html
-rw-r--r--. 1 jenkins jenkins 424 7月 4 2019 release
-rw-r--r--. 1 jenkins jenkins 21M 7月 4 2019 src.zip
-rw-r--r--. 1 jenkins jenkins 114K 6月 12 2019 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 jenkins jenkins 166K 7月 4 2019 THIRDPARTYLICENSEREADME.txt
我这里的节点上没有单独设置和安装 JDK 工具,但是任务用到了 Java 命令 却能正常构建,是因为我在 Jenkins 主节点上添加过 JDK,当其他构建节点需要工具工具时就会自动安装到 tools 目录。当然目前可以在 Jenkins 上配置的工具 有限,只支持如下工具的配置:

对于其他不支持在 Jenkins 管理面板配置的工具,我们可以在节点上自行安装到全局,也可以将工具放到自己喜欢的目录,然后配置环境变量指向到工具目录。
如果你在使用 Jenkins 时遇到什么棘手的问题,欢迎留言讨论。
节点准备:
mkdir jenkins_node_work_dir \
&& mkdir software \
&& cd software \
&& wget https://rplusoss.oss-cn-qingdao.aliyuncs.com/software/development/oracle-jdk/jdk-8u241-linux-x64.tar.gz \
&& tar -zxvf jdk-8u241-linux-x64.tar.gz
Jenkins 进阶篇 - 节点配置的更多相关文章
- Jenkins 进阶篇 - 权限配置
Jenkins的授权策略 Jenkins 默认的授权策略是[登录用户可以做任何事],也就是人人都是管理员,可以修改所有的设置以及构建所有的任务,不用做任何设置,有账号登录到 Jenkins 系统即可, ...
- Jenkins进阶-Slave 节点的配置(11)
Jenkins的主节点无法满足当前的发布需求,所以我们需要增加一个从节点,我们是本着节约的模式,所以主从节点均需要有任务来进行构建: 1.系统管理->管理节点: 2.添加从节点,管理节点-> ...
- Jenkins 进阶篇 - 任务关联
有时候我们的一个任务里面会进行很多的步骤,例如构建一个后端的 Java 服务,可能会有代码静态扫描,静态扫描通过后会打包成 jar 或者 war 文件,打包成功后可能还会对制品进行存档备份,然后可能会 ...
- Jenkins 基础篇-凭证配置
我们在正式开始使用 Jenkins 之前还要先配置一些凭证,这些凭证的作用主要是用于认证,例如我们要从代码仓库拉取代码,就需要用到代码仓库的账号密码或者密钥:我们要登录远程服务器也需要用户名密码或者密 ...
- Jenkins搭建,节点配置
一.服务器安装jdk和Jenkins 二.安装完成后打开jenkins页面:http://localhost:8080,设置管理员密码后登陆进去. 三.系统管理->全局变量,勾选允许用户注册 ...
- Jenkins 进阶篇 - 数据备份
随着我们的长期使用,Jenkins 系统中的内容会越来越多,特别是一些配置相关的东西,不能有任何丢失.这个时候我们就需要定期备份我们的 Jenkins 系统,避免一些误操作不小心删除了某些重要文件,J ...
- Jenkins 进阶篇 - 权限案例实践
为了演示方便,我这里创建了如下的一些任务,各个任务由包含在对应的目录中树形结构大概如下: jenkins-authority 目录类型任务 ├── dev-project-group 目录类型任务 │ ...
- Jenkins 基础篇 - Server 配置
我们使用 Jenkins 部署服务之前要先配置我们的目标服务器,配置目标服务器也很简单,就是将服务器的 IP.账号密码或者账号密钥配置在 Jenkins中.在演示服务器配置之前我们要先知道 Linux ...
- Jenkins 进阶篇 - 参数化构建
我们在构建任务时经常会遇到这样的情景,一个任务配置好了以后,在后面的构建过程中,又会修改一些配置.例如,我们构建项目的代码可能是拉取指定的分支或者是Tag进行构建,又或者是在构建是需要指定特定的运行平 ...
随机推荐
- 面试题---->线程的入门,读完可以应付一般的面试(管理员不要移除我的随笔啊)
这个都是入门和一般的常规知识,大佬轻喷 ①.继承Thread类 ②.实现Runnable接口(常用,优点多) ③.实现Callable接口 实现Runnable和Callable接口的类只能当作一个可 ...
- QFNU-ACM 2020.04.05个人赛补题
A.CodeForces-124A (简单数学题) #include<cstdio> #include<algorithm> #include<iostream> ...
- JS中函数定义和使用顺序
在js中如果定义函数是先声明函数,如: console.log(hello); //然后再去定义: function hello(){ alert("Hello");} 这种是可以 ...
- mysql枚举和集合
create table consumer( id int, name char(16), sex enum('male','female','other'), level enum('vip1',' ...
- 13.API基础
1.API 1.1 API概述-帮助文档的使用 什么是API API (Application Programming Interface) :应用程序编程接口 java中的API 指的就是 JDK ...
- SimpleSelectionSort
简单选择排序 <script type="text/javascript"> var obj={ data:[0,3,1,5,7,4,8,9,5], length:8 ...
- Docker Swarm(一)集群部署
一.机器环境 机器规划 172.16.0.89 swarm的manager节点 manager-node 172.16.0.90 swarm的node节点 node1 机器版本(均是:CentOS L ...
- 033.Python的__del__析构方法he__call__方法
一 __del__ 魔术方法(析构方法) 1.1 介绍 触发时机:当对象被内存回收的时候自动触发[1.页面执行完毕回收所有变量 2.所有对象被del的时候] 功能:对象使用完毕后资源回收 参数:一个s ...
- IDEA 怎么统计项目代码行数
引言 IDEA 统计项目代码行数,主要是使用 Statistic 插件来统计 第一步 点击 File->Settings,如下图所示: 第二步 点击 install 安装 Statistic 插 ...
- python文件处理(对比和筛选)版本2
场景:对比两个txt文件的差异,将对比结果写入html,将不同部分写入另一个txt #!/user/bin/python #!coding=utf-8 # -*- coding: utf-8 -*- ...