1、总览
- Jenkins 的任务可以分布在不同的节点上运行
- 节点上需要配置 Java 运行环境,Java_Version >1.5
- 节点支持 Windows 、 Linux 、 Mac
- Jenkins 运行的主机在逻辑上是 master 节点
- master 节点的名字必须叫 master ,而 slave 节点的名字可以随便取。
2、配置远程节点
2.1 前提条件
- 配置远程节点,首先要保证有远程的节点,无论是虚拟机或者是实体机
- 新的节点要与 Jenkins Server 保持连接畅通
- slave 支持远程运行,例如 ssh、jnlp
- Jenkins 需要从 git 上获取项目,因此 slave 也需要与 git 建立联系1)以 GitHub 账号为例,先创建公钥私钥,命令 ssh-keygen -t rsa -C "xxxx@qq.com"
[root@chenshifengdeLinuxServer ~]# git config --global user.name "chenshifeng"
[root@chenshifengdeLinuxServer ~]# git config --global user.email "xxxxx@qq.com"
[root@chenshifengdeLinuxServer ~]# ssh-keygen -t rsa -C "xxxxx@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YZwN2HKQlmhl3jD2RcaW+TGmhMqhgzrZGJGwjRD3/yw xxxx@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|=o. oB*.++o |
|+= .o+B*+** + |
|o..o.+.=Bo.+ o |
|. . o.o. .. . |
| * .. S |
|= . o |
| . E o |
| . |
| |
+----[SHA256]-----+
[root@chenshifengdeLinuxServer ~]# cd .ssh/
[root@chenshifengdeLinuxServer .ssh]# ls
authorized_keys id_rsa id_rsa.pub known_hosts
2)打开 GitHub->setting->SSH and GPG keys ,新建一个 SSH key ,输入公钥 id_ras.pub 中的内容。
2.2 登录方式
- 远程用户名密码
- 公钥私钥认证
系统管理” -> “管理节点”
3、节点创建
3.1 节点连接
1)在 master 机器上选择新建节点。
2)先以账号密码登录方式做演示:
3)保存后刷新状态,可以看到节点已经配置成功。
3.2 节点运行
1)在 job 中勾选"限制项目的运行节点",然后选择 slave 节点的标签保存。
2)构建后在控制台输出中就可以看到任务是由 slave 构建的。
4、踩坑
4.1 连接slave失败
第一次连接slave时可能会连接失败,出现报错:
/var/jenkins_home/.ssh/known_hosts [SSH] No Known Hosts file was found at /var/jenkins_home/.ssh/known_hosts. Please ensure one is created at this path and that Jenkins can read it.
这是因为 master 和 slave 直接没有建立信任联系,解决方法如下:
1)在节点配饰的启动方式中,选择“手动信任”。
2)保存启动后会在web页面的左下方有个 手动信任的选项 ,点进去选择 是 就 OK 了,这样就建立了信任联系,后面在启动时就畅通无阻了。
4.2 同步时区
问题:
docker 官方镜像使用的都是UTC 标准时间,这就导致了比beijing时间晚8小时。
解决:
基于centos 的镜像,系统时区是由/etc/localtime 控制
基于debian 的镜像,系统时区由/etc/timezone 控制
一、
可将系统内的/usr/share/zoneinfo/Asia/Shanghai 文件直接复制到以上位置修改时区
总共有两个文件要修改,修改/etc/localtime使本地时间正确(对应linux的date指令正确),另外还需要修改/etc/timezone使得时区正确(对应Java时间正确)
mv /etc/localtime /etc/localtime_bak # 容器内执行
echo 'Asia/Shanghai' >/etc/timezone # 容器内执行
docker cp /usr/share/zoneinfo/Asia/Shanghai [容器ID或名字]:/etc/localtime # 容器外执行
二、
但在基于centos 镜像内,只修改/etc/localtime ,tomcat 或者Nginx取的仍可能是UTC 时区,tomcat可配置catalina 启动文件的JAVA_OPTS参数,修正tomcat的时区
JAVA_OPTS="-Duser.timezone=GMT+08"
三、
在 Jenkins 容器启动的时候添加参数
docker run ... -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
5、总结
Jenkins 节点配置方法
节点上配通 GitHub
节点上配通 Java 和 Maven
提速 - 替换 Maven 源