目前我的 Jenkins 是运行在容器中, 使用 Docker 运行 Jenkins 容器 。容器能执行的任务非常有限,甚至可以说是基本没啥用。所以要配置主从机多节点执行任务,不同的节点分配不同的任务去执行,所以只需要执行节点有环境就可以执行对应环境需求的任务,根本不需要主节点配置任务环境
由于 Jenkins 是 Java 驱动的一个服务,所以一个节点想要成为 Jenkins 的从节点,需要配置 Java 环境
当选定了一个虚拟机或者服务器准备当作从节点之后,就需要给这个节点配置 Java 环境,其实就是安装 Java,所以如果已经安装过了就可以跳过这个步骤。
我这里使用的是 Ubuntu 的虚拟机,所以以下所有操作都是针对 Ubuntu 系统。
现在都是使用的 jdk8,官方 jdk8 安装包的下载地址是 jdk8 安装地址 ,可以选择 8u211 或者 8u212 的版本,选择下载的时候需要勾选官方的同意协议,然后选择下载,下载需要登陆官方网站,所以需要注册一个账号登陆才能下载。
这里我下载之后的包是 jdk-8u231-linux-x64.tar.gz
本地下载好 java 安装包之后,可以把安装包传送的服务器上面,然后在服务器上面创建一个目录 /usr/jvm/ 把安装包放到这个目录中。下命命令都是 root 用户操作的。
$ mkdir /usr/jvm # 创建存放jdk的文件夹 $ scp 本地存放路径 服务器用户名@IP:/usr/jvm/ # 把下载到windows电脑上的jdk压缩包拷贝到远程服务器
然后解压 jdk 包到当前目录:
$ cd /usr/jvm/ $ tar -xzvf jdk-8u311-linux-x64.tar.gz
接着需要配置 Java 环境变量,编辑 /etc/environment 、/etc/profile 文件,添加 java 相关环境变量:
$ vi /etc/environment export JAVA_HOME=/usr/jvm/jdk1.8.0_231 export JRE_HOME=/usr/jvm/jdk1.8.0_231/jre export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib $ vi /etc/profile export JAVA_HOME=/usr/jvm/jdk1.8.0_231 export JRE_HOME=/usr/jvm/jdk1.8.0_231/jre export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
编辑完成之后,执行 source /etc/profile 命令使环境变量生效。
然后可以查看以下 java 命令是否可用:
$ java -version java version "1.8.0_231" Java(TM) SE Runtime Environment (build 1.8.0_231-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
选中的从节点配置好 Java 环境之后,现在可以开始在 Jenkins 页面来配置从节点。
在插件管理中搜索 SSH Slaves 就可以找到这个插件,直接安装即可,这个插件的作用就是支持 SSH 连接。
安装完成之后可以看到插件管理中已经按照的插件中有这个:
插件安装之后需要在 Jenkins 上面添加一个凭证,也就是用来登陆从节点的账号。凭证可以选择密码登陆也可以选择密钥,这里我选择的密码登陆因为我的虚拟机是密码,之前 GitHub 那篇是密码登陆。
插件和凭证都准备好了就可以开始配置一个从节点了,基本配置可以看截图,主要是启动方式要选择 Launch agent agents via SSH,而且这个选项只有在安装了插件才会有。 系统管理-->节点管理
基本配置一目了然,然后还要配置一个高级配置项,这个里面比较重要的是 java 路径,这个也就是为什么要从节点安装 java 环境的原因。
其他的设置就看个人需求了,标签很重要,这个必须填写至少一个标签,因为这个是任务选择执行机的一个方式。
执行任务的时候,在任务的基础信息里面的限制项目的运行节点中选择配置的从节点的标签即可。
总结:Jenkins 主从节点的模式非常适合多种语言或者环境的构建,可以把执行不同任务的主机当作从节点去执行任务,这样就做到了一个主节点分配任务,其他节点执行。
参考文章:https://tendcode.com/article/jenkins-slave/