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进行构建,又或者是在构建是需要指定特定的运行平 ...
随机推荐
- Pulsar部署和实践(一)
前言 本地Docker部署Pulsar消息代理实现消息发布和消息订阅 介绍 相关概念,后面有时间再花时间整理下. 实践步骤 1.使用dokcer本地部署pulsar docker run -it \ ...
- IOCP实现高并发以及与传统socke编程的对比
前言 传统socket编程中服务端一般为每一个客户端创建一个线程(一对一).这样虽然可以使程序的结构简单明了并且方便对数据处理,但是这些都是建立在创建多个线程的基础上,也就是以牺牲线程为代价.一旦有大 ...
- Spring Boot读取自定义外部属性
测试的环境:Spring Boot2 + Maven +lombok 准备需要用到的基础类: public class People { private String name; private St ...
- ThreadLocal内存溢出代码演示和原因分析!
ThreadLocal 翻译成中文是线程本地变量的意思,也就是说它是线程中的私有变量,每个线程只能操作自己的私有变量,所以不会造成线程不安全的问题. 线程不安全是指,多个线程在同一时刻对同一个全局 ...
- SPECCPU2006 Spec2006 使用说明
http://www.vimlinux.com/lipeng/author/penglee5.html Spec2006使用说明 五 10 十月 2014 By penglee 工具介绍 SPEC C ...
- linux服务之FTP服务篇
一.FTP协议 FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机,它们依照FTP协议提供服务. FTP (File Transfer ...
- 03丨认识文档数据库MongoDB
- 2017-11-20 崂应工作总结,含LTC3780模块分析,含运放原理
学习了运算放大器的分类 运放的单点输入 差动模式 共模抑制输入模式 反相位比例运放 正相比例运放 电压跟随器 运放的放大比例计算 LTC3780模块的原理 因为: R19 这个电阻不确定他的接法 暂 ...
- 【大咖直播】Elastic 可观测性实战工作坊
Elastic 的可观测性解决方案是基于 Elastic Stack 的一站式解决方案.该解决方案具有完备的日志.指标.APM 和可用性采集能力,可以在大规模和云原生的环境下完成基于服务质量目标的管理 ...
- spark-steaming的exactly-once
spark实时计算中会存在数据丢失和数据重复计算的场景, 在receiver收到数据且通过driver的调度executor开始计算数据的时候如果driver突然崩溃,则此时executor就会被杀掉 ...