基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行

1、总览

  • Jenkins 的任务可以分布在不同的节点上运行
  • 节点上需要配置 Java 运行环境,Java_Version >1.5
  • 节点支持 Windows 、 Linux 、 Mac
  • Jenkins 运行的主机在逻辑上是 master 节点
  • master 节点的名字必须叫 master ,而 slave 节点的名字可以随便取。
    基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 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 中的内容。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行

2.2 登录方式

  • 远程用户名密码
  • 公钥私钥认证
    系统管理” -> “管理节点”
    基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行
    基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行

3、节点创建

3.1 节点连接

1)在 master 机器上选择新建节点。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行
2)先以账号密码登录方式做演示:
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行
3)保存后刷新状态,可以看到节点已经配置成功。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行

3.2 节点运行

1)在 job 中勾选"限制项目的运行节点",然后选择 slave 节点的标签保存。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行
2)构建后在控制台输出中就可以看到任务是由 slave 构建的。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 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)在节点配饰的启动方式中,选择“手动信任”。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行
2)保存启动后会在web页面的左下方有个 手动信任的选项 ,点进去选择 是 就 OK 了,这样就建立了信任联系,后面在启动时就畅通无阻了。
基于docker Jenkins搭建持续集成自动化测试环境,管理、配置、运行 Node 节点与 Slave 分布式运行

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 源

上一篇:写得太好了!java流行开发框架


下一篇:虚拟你装好KALI后配置,设置中文,换成国内的源