ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

CruiseControl.rb配置完全解析:cruise_config.rb的20个核心参数与Bundler集成实战

2026/8/27 16:59:01 拓冰建站 浏览量
CruiseControl.rb配置完全解析:cruise_config.rb的20个核心参数与Bundler集成实战 CruiseControl.rb配置完全解析cruise_config.rb的20个核心参数与Bundler集成实战【免费下载链接】cruisecontrol.rbCruiseControl for Ruby. Keep it simple.项目地址: https://gitcode.com/gh_mirrors/cr/cruisecontrol.rbCruiseControl.rb简称 CC.rb是一款由 Ruby 编写的轻量级持续集成CI服务器而它的项目级配置几乎全部集中在一个文件——cruise_config.rb中。掌握这个文件就掌握了 CC.rb 的调度、构建、通知与 Bundler 依赖管理的命脉。本文将带你完整梳理cruise_config.rb的 20 个核心参数并实战讲解 Bundler 集成机制帮助新手快速搭建可靠的 Ruby 持续集成流水线。 快速上手cruise_config.rb 放在哪里CC.rb 的所有项目数据都存放在~/.cruiseWindows 下为%USERPROFILE%\.cruise目录中。每个项目对应一个子目录~/.cruise/projects/你的项目名/ ├── cruise_config.rb # 项目构建配置本文主角 ├── work/ # 源码本地检出目录 └── build-123/ # 每次构建的产物日志、报告等cruise_config.rb有两种放置位置位置作用优先级~/.cruise/projects/项目名/cruise_config.rb本地配置可存放不入库的设置高覆盖仓库版本代码仓库根目录的cruise_config.rb随版本控制走团队协作推荐低官方模板见 samples/cruise_config.rb 与 config/cruise_config.rb.example。新建项目时 CC.rb 会自动为你生成一份示例文件见 app/models/project.rb。好消息配置文件被修改后CC.rb 会在下次轮询时自动检测并热加载无需重启服务热加载逻辑见 app/models/project.rb。所有配置都写在如下骨架之间Project.configure do |project| # 所有配置项都写在这里 end 20 个核心参数分类详解一、构建命令参数决定构建什么1️⃣rake_task—— 指定要执行的 Rake 任务project.rake_task cruise:all_tests若不配置CC.rb 会按cruise→test→default的顺序自动寻找 Rake 任务。2️⃣build_command—— 执行任意构建命令不限于 RakeCC.rb 通过退出码判断成败project.build_command rake cruise --trace RAILS_ENVtest⚠️易错点rake_task与build_command互斥同时设置会直接抛异常源码校验见 app/models/project.rb。使用build_command时注意工作目录是work/仓库外的脚本要写相对路径。二、调度与触发参数决定何时构建3️⃣scheduler.polling_interval—— 轮询源码仓库的间隔支持5秒到24小时project.scheduler.polling_interval 1.hour范围校验逻辑见 app/models/polling_scheduler.rb。4️⃣scheduler.always_build—— 设为true后每次轮询都强制构建无视源码是否有变更适合定时回归。5️⃣triggered_by—— 最强大的构建触发器两种典型用法# 定时构建每天 2 分钟后开始间隔 1 天 project.triggered_by ScheduledBuildTrigger.new(project, :build_interval 1.day, :start_time 2.minutes.from_now) # 构建链本项目构建成功后自动触发另一项目 project.triggered_by OtherProjectName构建链Build Chaining是多项目协作的精髓——短构建先跑成功后再启动长构建。三、Bundler 参数决定依赖装在哪6️⃣use_bundler—— 开关。CC.rb 默认会自动检测只要work/Gemfile存在就启用 Bundler设为false可强制关闭判断逻辑见 app/models/project.rb。7️⃣gemfile—— 指定非默认的 Gemfile 名称默认就是Gemfile。8️⃣bundler_args—— 透传给bundle install的参数默认值为--pathwork/vendor --gemfileGemfile路径 --no-color默认值初始化见 app/models/project.rb四、邮件通知参数决定谁收到消息9️⃣email_notifier.emails—— 构建**变红broken与变绿fixed**时的收件人列表project.email_notifier.emails [dev-teamexample.com]email_notifier.from—— 发件人地址不设置则回退到全站默认值CruiseControl::Configuration.email_from插件实现见 lib/builder_plugins/email_notifier.rb。 记得先在~/.cruise/config/site_config.rb中配好 SMTP否则邮件发不出去。五、日志与产物参数决定留下什么1️⃣1️⃣log_publisher.globs—— 构建结束后把匹配的日志文件移动到构建产物目录默认log/*.logproject.log_publisher.globs [log/*.log, tmp/*.txt]1️⃣2️⃣sequential_build_logger.enabled—— 启用顺序构建日志插件便于排查多次重跑的顺序问题。1️⃣3️⃣sequential_build_logger.show_in_artifacts—— 让该日志同时出现在构建产物中方便下载查看。六、环境与检出参数决定在什么环境构建1️⃣4️⃣environment—— 为构建进程注入环境变量project.environment[DB_HOST] db.example.com project.environment[DB_PORT] 12341️⃣5️⃣do_clean_checkout—— 控制干净检出频率支持:always、:never、:every 1.dayproject.do_clean_checkout :every 1.day定期干净检出可避免工作区残留脏文件导致的诡异失败。1️⃣6️⃣source_control—— 切换版本控制适配器Git / Subversion / Mercurial / Bazaar通常由cruise add自动识别。1️⃣7️⃣path—— 项目数据根目录一般无需手动设置。七、进阶参数1️⃣8️⃣Project.plugin—— 注册自定义插件解锁邮件、Jabber、日志发布等扩展能力插件架构见 lib/builder_plugins/builder_plugin.rb。1️⃣9️⃣project.name—— 读取项目名常用于按项目名分支配置case project.name when MyProject.Quick then project.rake_task test:units when MyProject.BigBertha then project.rake_task cruise:all_tests endconfig_tracker—— 跟踪两处配置文件的一致性config_valid?用于判断配置是否被意外改动。 Bundler 集成实战CC.rb 对 Bundler 的集成非常隐形理解以下 4 步闭环即可自动检测构建前调用uses_bundler?只要存在 Gemfile 就启用 Bundler先查后装执行bundle check --gemfile...依赖已就绪则秒过否则回退到bundle install带你在bundler_args里配置的参数逻辑见 app/models/build.rb依赖隔离默认--path指向work/vendor所有 gem 装在检出目录内项目间互不污染打包执行最终以BUNDLE_GEMFILE... bundle exec rake ...的方式跑构建任务保证运行环境与安装环境完全一致见 app/models/build.rb。离线/低网络环境实战技巧加--local参数只从本地 gem 缓存安装避免构建卡在网络下载上——这正是 CC.rb 自己配置中使用的做法Project.configure do |project| project.bundler_args --path#{project.gem_install_path} --gemfile#{project.gemfile} --no-color --local end完整实例见项目根目录的 cruise_config.rb。另外JRuby Jetty 部署场景下Web 容器启动时还会自动设置BUNDLE_WITHOUTdevelopment:test以精简依赖见 server_jar/jetty-config/WEB-INF/init.rb。✅ 一份可直接套用的推荐配置Project.configure do |project| # 构建命令 project.rake_task cruise # 调度每 30 分钟轮询有变更才构建 project.scheduler.polling_interval 30.minutes project.scheduler.always_build false # 通知构建变红/变绿时发邮件 project.email_notifier.emails [teamexample.com] project.email_notifier.from ciexample.com # Bundler离线安装提速并保证稳定性 project.bundler_args --path#{project.gem_install_path} --gemfile#{project.gemfile} --no-color --local # 日志产物 project.log_publisher.globs [log/*.log] # 环境 project.environment[RAILS_ENV] test end 参考资料官方手册构建调度、环境、干净检出等章节app/views/documentation/manual.html.red项目模型与配置加载源码app/models/project.rb轮询调度器app/models/polling_scheduler.rb构建执行与 Bundler 调用app/models/build.rb邮件通知插件lib/builder_plugins/email_notifier.rb日志发布插件lib/builder_plugins/log_publisher.rb全局站点配置示例config/site_config.rb_example小结cruise_config.rb用 3~5 行 Ruby 就能完成最简配置用 20 个参数则能覆盖构建命令、调度触发、Bundler 集成、通知与产物管理的全部场景。建议把仓库根目录的版本纳入版本控制让构建配置与代码一起演进、一起审计。【免费下载链接】cruisecontrol.rbCruiseControl for Ruby. Keep it simple.项目地址: https://gitcode.com/gh_mirrors/cr/cruisecontrol.rb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考