基于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 源
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】