当前位置: 首页 > news >正文

SSHKit与Rake集成:构建自动化部署任务的10个实用示例

SSHKit与Rake集成:构建自动化部署任务的10个实用示例

【免费下载链接】sshkitA toolkit for deploying code and assets to servers in a repeatable, testable, reliable way.项目地址: https://gitcode.com/gh_mirrors/ss/sshkit

SSHKit是一个强大的Ruby工具包,用于以可重复、可测试且可靠的方式将代码和资产部署到服务器。结合Rake任务运行器,它能帮助开发者构建高效的自动化部署流程,显著提升开发效率。

1. 基础部署任务配置

在项目根目录的Rakefile中添加基础部署任务,实现代码拉取和依赖安装:

require 'sshkit' desc "基础部署任务:拉取代码并安装依赖" task :deploy do include SSHKit::DSL on "example.com" do |host| within "/opt/app" do execute :git, :pull execute :bundle, :install, '--deployment' end end end

2. 多服务器并行部署

通过SSHKit的并行执行功能,同时部署到多台服务器:

desc "并行部署到多台服务器" task :deploy_parallel do include SSHKit::DSL servers = %w[app1.example.com app2.example.com] on servers, in: :parallel do |host| within "/opt/app" do execute :git, :pull execute :bundle, :install end end end

3. 数据库迁移与资产预编译

扩展部署任务,添加数据库迁移和资产处理步骤:

desc "完整部署流程:代码更新+数据库迁移+资产预编译" task :deploy_full do include SSHKit::DSL on "example.com" do within "/opt/app" do execute :git, :pull execute :bundle, :install execute :rake, 'db:migrate' execute :rake, 'assets:precompile' execute :touch, 'tmp/restart.txt' end end end

4. 命令映射自定义配置

通过lib/sshkit/command_map.rb自定义命令路径:

# 在Rake任务中配置命令映射 SSHKit.config.command_map[:rake] = "./bin/rake" SSHKit.config.command_map[:bundle] = "/usr/local/rvm/gems/ruby-3.2.0/bin/bundle" desc "使用自定义命令路径部署" task :deploy_custom do include SSHKit::DSL on "example.com" do within "/opt/app" do execute :bundle, :install execute :rake, 'db:migrate' end end end

5. 环境变量管理

为不同环境设置特定环境变量:

desc "带环境变量的部署任务" task :deploy_staging do include SSHKit::DSL SSHKit.config.default_env = { path: '/usr/local/bin:$PATH', rails_env: 'staging' } on "staging.example.com" do within "/opt/staging/app" do execute :git, :pull execute :bundle, :install execute :rake, 'db:migrate' end end end

6. 文件上传与下载

实现服务器与本地之间的文件传输:

desc "上传配置文件并下载日志" task :file_transfer do include SSHKit::DSL on "example.com" do # 上传本地配置文件 upload! 'config/database.yml', '/opt/app/shared/database.yml' # 下载远程日志文件 download! '/var/log/app.log', 'log/remote_app.log' end end

7. 条件执行与错误处理

根据服务器状态执行不同操作:

desc "条件部署任务" task :deploy_conditional do include SSHKit::DSL on "example.com" do |host| within "/opt/app" do if test "[ -d .git ]" execute :git, :pull else execute :git, :clone, 'https://gitcode.com/gh_mirrors/ss/sshkit', '.' end # 错误处理示例 begin execute :rake, 'db:migrate' rescue SSHKit::Command::Failed => e error "数据库迁移失败: #{e.message}" # 可以添加回滚逻辑 end end end end

8. 切换用户与工作目录

以特定用户身份在指定目录执行命令:

desc "以指定用户身份执行命令" task :deploy_as_user do include SSHKit::DSL on "example.com" do as 'deploy' do within '/home/deploy/app' do execute :git, :pull execute :bundle, :install execute :touch, 'tmp/restart.txt' end end end end

9. 自定义输出格式化

配置部署过程的输出格式:

desc "自定义输出格式的部署任务" task :deploy_formatted do include SSHKit::DSL # 设置简洁输出格式 SSHKit.config.use_format :simpletext on "example.com" do within "/opt/app" do info "开始部署..." execute :git, :pull info "代码拉取完成" execute :bundle, :install info "依赖安装完成" end end end

10. 本地命令执行

在本地执行命令,与远程操作结合:

desc "本地与远程结合的部署任务" task :deploy_with_local do include SSHKit::DSL # 本地打包资产 run_locally do execute :rake, 'assets:precompile' execute :tar, 'czf assets.tar.gz public/assets' end # 远程部署 on "example.com" do upload! 'assets.tar.gz', '/tmp/assets.tar.gz' within "/opt/app" do execute :tar, 'xzf /tmp/assets.tar.gz' execute :rm, '/tmp/assets.tar.gz' execute :touch, 'tmp/restart.txt' end end end

以上示例展示了SSHKit与Rake集成的核心功能,涵盖了从简单部署到复杂条件执行的各种场景。通过这些示例,开发者可以构建符合自身需求的自动化部署流程,提高部署效率和可靠性。所有示例代码均可在项目的examples/目录中找到更详细的使用说明。

【免费下载链接】sshkitA toolkit for deploying code and assets to servers in a repeatable, testable, reliable way.项目地址: https://gitcode.com/gh_mirrors/ss/sshkit

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

http://www.jsqmd.com/news/478236/

相关文章:

  • L2-010 排座位(很好的一题)
  • 25美元AI智能眼镜革命:OpenGlass终极制作指南
  • HTML转PDF工具跨平台安装全攻略:从技术挑战到完美解决方案
  • 让软件开口说你的语言:RunCat多语言本地化实战指南
  • 如何快速掌握LOIC网络压力测试工具:从基础原理到实战应用的完整指南
  • 如何使用智能排版引擎Typeset提升网页文字渲染质量:完整指南
  • 2026年晋安宠物体检医生实力盘点,这几家值得了解,猫咪眼科/宠物医院/猫咪角膜移植/猫咪体检,宠物体检医生排行 - 品牌推荐师
  • ts-belt字典操作完全指南:高效处理对象数据
  • UForm多语言支持详解:从英语到中文的跨语言文本编码方案
  • workflow-use:零代码自动化工作流的终极解决方案
  • Docker环境下部署qBittorrent-ClientBlocker的快速教程
  • 终极Google Maps数据采集神器:3分钟上手的开源工具帮你批量获取商家信息
  • Envoy AI Gateway性能优化指南:从理论到实践的调优技巧
  • 终极指南:如何用rclone实现跨平台云存储自由管理
  • 基于融合正余弦和柯西变异的麻雀优化算法(SCSSA)-CNN-BiLSTM(双向长短期记忆网络)的时间序列预测模型附Matlab代码
  • Unleash功能开关完全指南:掌握现代软件发布的核心技术
  • Rust二进制大小优化全攻略:从基础配置到极致压缩
  • 基于三相坐标系状态方程的感应电动机起动动态计算附Matlab代码
  • Guanaco模型的推理延迟优化:模型量化与算子融合完整指南
  • 如何用5个关键步骤掌握PFLlib:个性化联邦学习的实战指南
  • Quark-H5:5分钟打造专业级移动端页面的开源利器
  • 现代服务器管理新范式:mdserver-web面板技术深度解析
  • 终极MinerU零障碍升级指南:从入门到精通PDF转换神器
  • 基于视觉同步定位与建图(Visual-SLAM)算法的粒子群优化无人机路径规划研究附Matlab代码
  • 解决Nuxt Color Mode闪屏问题:实用技巧与最佳实践
  • 如何高效管理非结构化数据:Datachain平台的ETL与版本控制终极指南
  • 如何快速实现gRPC-web与Node.js集成开发:完整实战指南
  • 5分钟掌握Dism++:让Windows系统维护变得如此简单的终极指南
  • 如何用X-AnyLabeling实现AI辅助数据标注:从入门到精通的完整指南
  • 突破显存瓶颈:AI模型4bit量化技术深度解析