无需Jenkins代理使用Docker容器作为Jenkins构建节点的方案咨询
无需Jenkins代理使用Docker容器作为Jenkins构建节点的方案咨询
兄弟,太懂这种“环境没法改只能硬凑”的处境了!针对你用RHEL5 Docker容器跑Jenkins任务、又不想用官方Jenkins代理的需求,用SSH完全可行,给你捋两个实操方案:
方案一:直接用SSH远程执行构建命令(无需注册节点)
这个方式最轻量化,不需要把容器注册成Jenkins节点,每次任务直接通过SSH连进容器跑脚本就行,适合简单的构建任务:
1. 先把RHEL5容器配置好SSH服务
因为RHEL5官方源已经失效了,得先换归档源,再装SSH服务和Java8。给你写个现成的Dockerfile:
FROM rhel5:latest # 替换成CentOS5的归档源(RHEL5官方源已停更) RUN rm -rf /etc/yum.repos.d/* && \ echo "[centos5-base]" > /etc/yum.repos.d/centos5.repo && \ echo "name=CentOS-5 Base" >> /etc/yum.repos.d/centos5.repo && \ echo "baseurl=http://vault.centos.org/5.11/os/x86_64/" >> /etc/yum.repos.d/centos5.repo && \ echo "gpgcheck=0" >> /etc/yum.repos.d/centos5.repo # 安装SSH服务和Java8 RUN yum install -y openssh-server java-1.8.0-openjdk # 配置SSH:允许root密钥登录,禁用密码(更安全) RUN sed -i 's/#PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config && \ sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config # 复制你的公钥到容器(先在宿主机把公钥写入当前目录的authorized_keys文件) RUN mkdir -p /root/.ssh && \ chmod 700 /root/.ssh && \ COPY authorized_keys /root/.ssh/authorized_keys && \ chmod 600 /root/.ssh/authorized_keys # 生成SSH主机密钥(否则sshd启动失败) RUN ssh-keygen -A # 暴露SSH端口 EXPOSE 22 # 启动SSH服务 CMD ["/usr/sbin/sshd", "-D"]
2. 构建并启动容器
# 把你宿主机的SSH公钥写入authorized_keys cat ~/.ssh/id_rsa.pub > authorized_keys # 构建镜像 docker build -t rhel5-ssh-jenkins . # 启动容器,映射宿主机2222端口到容器22端口 docker run -d -p 2222:22 --name rhel5-jenkins-node rhel5-ssh-jenkins
3. Jenkins端配置
- 先装
SSH plugin插件; - 进入「Manage Jenkins」→「Configure System」,找到「SSH servers」,添加你的容器信息:主机填
localhost,端口2222,用户名root,凭据选你宿主机的SSH私钥; - 新建Job时,添加「Execute shell script on remote host using ssh」步骤,直接写你的构建命令就行,比如编译脚本、打包命令等。
方案二:把容器注册成Jenkins SSH节点(支持复杂任务)
如果需要Jenkins统一管理节点资源、任务队列,这个方式更合适。核心是利用Jenkins的SSH节点功能,它会自动推送兼容Java8的slave.jar到容器,不需要你预先装代理:
1. 容器配置和方案一完全一样
先按方案一的步骤把带SSH的RHEL5容器跑起来。
2. Jenkins端配置节点
- 注意:你的Jenkins服务器必须是支持Java8作为Agent的版本(比如LTS 2.346.3及更早版本,新版本的Jenkins已经不再兼容Java8 Agent了);
- 进入「Manage Jenkins」→「Manage Nodes and Clouds」→「New Node」,选择「Permanent Agent」;
- 填写节点名称、远程工作目录(比如
/var/jenkins),启动方式选「Launch agent via SSH」; - 填写容器的主机名(
localhost)、端口(2222),凭据选root的SSH私钥,保存即可; - Jenkins会自动把适配Java8的
slave.jar传到容器并启动,之后这个节点就可以正常跑Jenkins任务了,全程不需要你手动部署Jenkins代理。
几个注意事项
- 如果你需要保存构建产物,可以在启动容器时挂载宿主机目录:
docker run -d -p 2222:22 -v /host/jenkins-work:/var/jenkins --name rhel5-jenkins-node rhel5-ssh-jenkins; - 可以给容器加资源限制,比如
--cpus 2 --memory 2g,避免影响宿主机; - RHEL5的Java8要确保能正常运行,部分归档源可能需要调整,可以先在容器里手动测试
java -version。
备注:内容来源于stack exchange,提问作者Juan Jimenez




