You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

无需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

火山引擎 最新活动