☰
Rundeck 基于 CentOS 7 的 Docker RPM 安装验证指南:本地构建包的一键安装测试
2026/10/6 2:40:30 网站建设 项目流程
  • 运维
  • 任务调度
  • 后端

【免费下载链接】rundeck

Enable Self-Service Operations: Give specific users access to your existing tools, services, and scripts

项目地址:https://gitcode.com/gh_mirrors/ru/rundeck
点击查看免费下载

本指南以 Rundeck 仓库中docker/yuminstall-centos7目录为核心,讲解如何在 CentOS 7 容器环境中通过yum安装本地构建的 Rundeck RPM 包,并启动rundeckd服务完成安装验证。读者将掌握镜像构建、源码目录挂载、RPM 安装与启动验证的完整流程,可用于日常开发中对打包产物的回归测试。

方案概览与适用场景

Rundeck 的 RPM 安装验证需要与构建产物"解耦":开发者在本机构建出 RPM 后,往往希望在接近生产环境的系统(如 CentOS 7)中验证包能否正常安装、服务能否启动。docker/yuminstall-centos7提供的就是这样一套轻量验证方案:

  • 使用本地构建的.rpm文件,而不是预先打包好的镜像;
  • 通过-v $PWD:/home/rundeck/rundeck把源码仓库目录挂载进容器,RPM 文件随之可见;
  • 容器启动时自动执行yum install并启动rundeckd服务。

整个验证流程不依赖外网拉取制品,完全基于本地构建产物,适合 CI/CD 流水线与开发者的本地回归测试。该目录配套的基础镜像与启动脚本见 docker/centos7systemd/Dockerfile 和 docker/yuminstall-centos7/entry.sh。

工作流程总览

完整流程分为四个阶段:

  1. 构建 systemd 基础镜像(docker/centos7systemd),为容器内运行rundeckd服务提供 init 环境;
  2. 构建 yum 安装镜像(docker/yuminstall-centos7),预装 OpenJDK、创建rundeck用户,并设置启动入口;
  3. 以交互方式运行容器,把当前源码目录挂载到容器内/home/rundeck/rundeck;
  4. 容器内执行安装与启动:yum install安装 RPM,service rundeckd start启动服务,随后进入 shell 进行手工验证。

第一步:构建 systemd 基础镜像

由于容器内需要通过service rundeckd start启动系统服务,基础镜像需要以 systemd 作为 init 进程。仓库为此提供了专用镜像定义 docker/centos7systemd/Dockerfile:

FROM centos:7 ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init"]

该镜像基于官方centos:7,通过清理 systemd 各 target 的默认 wants 链接来适配容器环境(容器内不需要的 udev、initctl 等服务会被移除),并挂载/sys/fs/cgroup卷,最终以/usr/sbin/init作为默认命令,从而保证容器内可以运行 systemd 管理的服务。

构建命令(在仓库根目录执行):

docker build --rm -t local/c7-systemd docker/centos7systemd

--rm表示在构建成功后删除中间容器,-t local/c7-systemd为镜像指定标签,该标签会被下一步的安装镜像以FROM local/c7-systemd方式引用。

第二步:构建 yum 安装镜像

安装镜像定义位于 docker/yuminstall-centos7/Dockerfile,其核心内容如下:

FROM local/c7-systemd MAINTAINER Bill W RUN rpm -Uvh https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-10.noarch.rpm RUN yum -y update RUN yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel RUN useradd rundeck #USER rundeck ENV USERNAME=rundeck \ USER=rundeck \ HOME=/home/rundeck \ LOGNAME=$USERNAME \ TERM=xterm-256color ENV JAVA_HOME=/etc/alternatives/java_sdk ADD entry.sh /entry.sh RUN chmod +x /entry.sh VOLUME $HOME/rundeck WORKDIR $HOME/rundeck EXPOSE 4440 ENTRYPOINT ["/entry.sh"]

镜像构建时依次完成以下动作:

步骤作用
安装 EPEL 仓库通过rpm -Uvh安装epel-release,为后续 yum 安装补充软件源
yum -y update更新系统软件包到最新版本
安装 JDK安装java-1.8.0-openjdk与java-1.8.0-openjdk-devel,作为 Rundeck 运行所需的 Java 运行时与开发包
创建用户useradd rundeck创建运行 Rundeck 的系统用户,同时通过环境变量把USERNAME、USER、HOME等统一指向rundeck//home/rundeck
设置 Java 环境JAVA_HOME=/etc/alternatives/java_sdk指向系统 alternatives 管理的 JDK 路径
配置入口与挂载将 entry.sh 拷贝到/entry.sh并赋予执行权限;声明VOLUME $HOME/rundeck(即/home/rundeck)用于挂载源码目录;WORKDIR设为/home/rundeck
暴露端口EXPOSE 4440,即 Rundeck Web 服务默认端口
指定启动入口ENTRYPOINT ["/entry.sh"],容器启动时先执行安装脚本

构建命令:

docker build docker/yuminstall-centos7

注意此命令未指定-t标签,构建完成后需要从输出中复制镜像 ID(形如53c9cb76cbe1),供下一步docker run使用。由于挂载点/home/rundeck被声明为 VOLUME,即使不显式指定-v,Docker 也会为容器创建一个匿名卷。

第三步:挂载源码目录并运行容器

在仓库根目录执行($PWD即源码根目录,$IMG为上一步复制的镜像 ID):

docker run -it -v $PWD:/home/rundeck/rundeck $IMG bash

参数说明:

  • -it:以交互模式运行并分配伪终端,便于进入容器 shell 进行手工检查;
  • -v $PWD:/home/rundeck/rundeck:将当前源码仓库根目录绑定挂载到容器内/home/rundeck/rundeck。这样本地构建出的 RPM 产物对容器即时可见,无需拷贝进镜像;
  • bash:作为传给ENTRYPOINT的附加参数。容器启动时 entry.sh 会先完成安装与启动,最后通过exec "$@"以 bash 替换当前进程,让用户进入 shell。

容器启动时发生了什么

容器入口脚本 docker/yuminstall-centos7/entry.sh 的内容如下:

#!/bin/bash echo "args $*" if ! find $HOME/rundeck/packaging/rpmdist/RPMS/noarch/ -name '*.rpm' ; then echo "rpm not found at $HOME/rundeck/packaging/rpmdist/RPMS/noarch/rundeck*.rpm" exit 2 fi yum install -y $HOME/rundeck/packaging/rpmdist/RPMS/noarch/rundeck*.rpm service rundeckd start exec "$@"

启动流程分为三步:

  1. 检查 RPM 产物是否存在:脚本会在挂载目录下的packaging/rpmdist/RPMS/noarch/中查找*.rpm文件。这个路径对应仓库中 RPM 打包输出的目录结构——Rundeck 的 RPM 制品会输出到packaging/rpmdist/RPMS/noarch/下,包名形如rundeck*.rpm。若未找到,脚本打印错误提示并以退出码2终止;
  2. yum 安装 RPM:yum install -y $HOME/rundeck/packaging/rpmdist/RPMS/noarch/rundeck*.rpm一次性安装全部匹配的本地 RPM 包。由于是本地文件路径,yum 会直接解析本地依赖并安装,-y自动应答确认;
  3. 启动服务并进入 shell:service rundeckd start启动 Rundeck 守护进程,最后exec "$@"用用户传入的命令(此处为bash)替换当前 shell 进程,进入交互环境。

第四步:安装后的验证

容器内服务启动后,可以从以下几个方面验证安装是否成功:

  • 服务状态:执行service rundeckd status确认rundeckd处于运行状态;
  • 进程检查:通过ps aux | grep rundeck查看 Rundeck 的 Java 进程是否存活;
  • 端口检查:Rundeck Web 默认监听4440端口(镜像中已通过EXPOSE 4440声明),可用ss -ltn或netstat -ltn查看监听情况;
  • 日志检查:Rundeck 日志文件位于安装目录(RPM 安装后通常在/var/lib/rundeck/logs),可查看启动过程是否出现异常;
  • RPM 包信息:执行rpm -qa | grep rundeck确认 RPM 已正确写入系统 RPM 数据库,rpm -qi可查看包的详细信息。

与其他安装验证方案的对应关系

仓库中还提供了多套同构的安装验证方案,可相互对照理解:

  • docker/rpminstall/Readme.md 及其 entry.sh:同样通过挂载源码目录验证 RPM 安装,区别在于它直接从packaging/build/distributions目录下的 RPM 文件入手,使用rpm -ivh安装;
  • docker/yuminstall/Readme.md:与 CentOS 7 版流程一致,面向其他 yum 系基础镜像的验证;
  • packaging/test/docker/rpminstall:仓库内置的 Docker 化 RPM 安装测试目录,配合 test/test-docker-install-rpm.sh 可一键执行"构建镜像 + 运行安装测试"的完整回归,其中docker run -it -v "$PWD:/home/rundeck/rundeck" "$TAG":latest -test的写法与本指南的运行方式一脉相承;
  • packaging/lib/rpm/etc/rc.d/init.d/rundeckd:RPM 包中随附的rundeckdinit 脚本,正是service rundeckd start实际调用的服务管理脚本;相关的安装后处理逻辑可见 packaging/lib/rpm/scripts/postinst.sh 与 packaging/lib/rpm/scripts/preinst.sh。

此外,仓库根目录的 test/test-docker-install-rpm.sh 展示了在 CI 场景中复用同一镜像进行自动化的典型模式:先docker build -t "$TAG-util"构建基础工具镜像,再构建安装镜像并以-test参数运行,将交互式验证转换为脚本化断言。

注意事项与使用限制

  • 需提前构建 RPM:本方案验证的是"本地已构建的 RPM",因此运行前需先通过仓库打包流程产出 RPM 文件,并确认其位于挂载路径packaging/rpmdist/RPMS/noarch/下(可结合 packaging 目录的打包配置确认输出位置);
  • 挂载路径必须一致:容器内查找 RPM 的路径固定为/home/rundeck/rundeck/packaging/rpmdist/RPMS/noarch/,因此docker run时必须以-v $PWD:/home/rundeck/rundeck的方式挂载,且需在仓库根目录执行命令,否则 entry.sh 会因找不到 RPM 而退出;
  • 镜像基础为 CentOS 7 与 Java 8:基础镜像基于centos:7,安装的是java-1.8.0-openjdk,适用于与 Rundeck 该版本打包产物对应的运行环境;若目标运行环境不同(如 RHEL 系其他版本),可参考 docker/installcommon 下多版本镜像定义进行调整;
  • 交互模式依赖本地 Docker 环境:docker build与docker run需要本机已安装并可访问 Docker 守护进程,容器内服务验证依赖 systemd,因此不建议在不支持 systemd 的宿主环境中运行。

小结

docker/yuminstall-centos7为 Rundeck 提供了一条"本地构建、容器内安装"的 RPM 验证路径:以 systemd 化的 CentOS 7 镜像为底座,构建时预装 JDK 并固定入口脚本,运行时通过卷挂载让容器直接访问构建产物,entry.sh 自动完成 RPM 检查、yum 安装与服务启动。整套流程命令简单、可复现性强,既适合开发者在提交打包改动前做本地冒烟验证,也适合作为 CI 中自动化安装测试的起点。

  • 运维
  • 任务调度
  • 后端

【免费下载链接】rundeck

Enable Self-Service Operations: Give specific users access to your existing tools, services, and scripts

项目地址:https://gitcode.com/gh_mirrors/ru/rundeck
点击查看免费下载

相关推荐

上一篇:Kubernetes SIG Scalability 贡献指南:从入门到规模化性能工程实战
下一篇:使用 Wio Terminal 通过 MQTT 发布 DHT11 温度遥测:IoT-For-Beginners 植物生长预测(GDD)实战指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询