Rundeck 基于 CentOS 7 的 Docker RPM 安装验证指南:本地构建包的一键安装测试
运维任务调度后端【免费下载链接】rundeckEnable 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。工作流程总览完整流程分为四个阶段构建 systemd 基础镜像docker/centos7systemd为容器内运行rundeckd服务提供 init 环境构建 yum 安装镜像docker/yuminstall-centos7预装 OpenJDK、创建rundeck用户并设置启动入口以交互方式运行容器把当前源码目录挂载到容器内/home/rundeck/rundeck容器内执行安装与启动yum install安装 RPMservice rundeckd start启动服务随后进入 shell 进行手工验证。第一步构建 systemd 基础镜像由于容器内需要通过service rundeckd start启动系统服务基础镜像需要以 systemd 作为 init 进程。仓库为此提供了专用镜像定义 docker/centos7systemd/DockerfileFROM 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 USERNAMErundeck \ USERrundeck \ HOME/home/rundeck \ LOGNAME$USERNAME \ TERMxterm-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即使不显式指定-vDocker 也会为容器创建一个匿名卷。第三步挂载源码目录并运行容器在仓库根目录执行$PWD即源码根目录$IMG为上一步复制的镜像 IDdocker 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 $启动流程分为三步检查 RPM 产物是否存在脚本会在挂载目录下的packaging/rpmdist/RPMS/noarch/中查找*.rpm文件。这个路径对应仓库中 RPM 打包输出的目录结构——Rundeck 的 RPM 制品会输出到packaging/rpmdist/RPMS/noarch/下包名形如rundeck*.rpm。若未找到脚本打印错误提示并以退出码2终止yum 安装 RPMyum install -y $HOME/rundeck/packaging/rpmdist/RPMS/noarch/rundeck*.rpm一次性安装全部匹配的本地 RPM 包。由于是本地文件路径yum 会直接解析本地依赖并安装-y自动应答确认启动服务并进入 shellservice 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/rundeckdRPM 包中随附的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 中自动化安装测试的起点。赞分享运维任务调度后端【免费下载链接】rundeckEnable Self-Service Operations: Give specific users access to your existing tools, services, and scripts项目地址https://gitcode.com/gh_mirrors/ru/rundeck点击查看免费下载相关推荐PHPStan 错误详解preInc.nonNumeric——对非数值类型使用前置自增运算符PHPStan 错误详解preInc.nonNumeric——对非数值类型使用前置自增运算符 导读 preInc.nonNumeric 是 PHPStanP运维任务调度后端librdkafka RPM 打包全指南基于 Mock 与 Docker 构建和验证 Apache Kafka C 库安装包librdkafka RPM 打包全指南基于 Mock 与 Docker 构建和验证 Apache Kafka C 库安装包 导读 本文以 librdkafk可观测性日志分析云原生流处理在 CentOS 上安装 VectorYUM、RPM、Docker、脚本安装器与 Helm 完整指南在 CentOS 上安装 VectorYUM、RPM、Docker、脚本安装器与 Helm 完整指南 Vector 是一个高性能的可观测性数据管道obser可观测性数据工程数据集成日志分析上一篇Kubernetes SIG Scalability 贡献指南从入门到规模化性能工程实战下一篇使用 Wio Terminal 通过 MQTT 发布 DHT11 温度遥测IoT-For-Beginners 植物生长预测GDD实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考