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

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 源

原文地址:https://www.cnblogs.com/R-bear/p/15045819.html