使用 capistrano 3.11 实现一个小的发布脚本
Capistrano是用ruby编写的可以在一台或多台服务器上运行脚本的开源工具,它主要用于部署web应用。它自动完成多台服务器上新版本的同步更新,包括数据库的改变。
Capistrano工具怎么样?
这个问题各个不同的开发团队有各自的答案,不管网上说这个工具有多好,只有符合自己的需求才是最好。
未使用Capistrano之前,每次发布代码,都需要以下几个步骤
连接服务器: 通过 SSH 登上 正式生产服务区, 进入项目目录
获取最新代码:执行 git pull 获取 master 分支最新代码
清除缓存:清除缓存
以往发布方式不足的地方
每次都是重复操作那几条相同的命令,机械,繁琐
出错 rollback 操作没有 Capistrano 简单
关键配置信息需要放在版本库中(数据库配置,接口配置信息)
个性化信息需要手动修改,或者手动发布。
Capistrano 安装
确保电脑安装好了 ruby 2.5以上, gem 2.7 以上
gem install capistrano
如果装不上,考虑 ruby 版本 和 gem 版本是不是太低
gem install bundle
初始化项目
cap install
编写Capistrano脚本
vim config/deploy.rb
lock "~> 3.11.0"
# 采用ssh 方式登录远程服务器
# remote server 是远程服务器器地址,一般是网站正式服务器地址
# server user 是登录到远程服务器的用户
# web, app, db 都是角色名,我三个都在同一个服务器,所以写在一起。
server 'remote server', user: 'server user', roles: %w{web app db}, primary: true
# release path 发布到正式服务器的路径,这个路径需要提前在服务器上创建好
set :deploy_to, "release path"
# application name 自定义的应用名称,没什么作用
set :application, "application name"
# 设置代码仓库地址, 我用的git
set :repo_url, "git lab"
# 设置代码版本控制工具
set :scm, "git"
# 设置获取哪个分支的代码,默认是 master
set :branch, "master"
# 设置发布采用缓存技术。这个很有用,如果未设置这个,每次发布都是全量发布,超慢,如果依赖的vendor多,会更慢。
set :repository_cache, "git_cache"
set :deploy_via, :remote_cache
# ssh 选项设置。 告诉 Capistrano , ssh key 在本机的位置。
set :ssh_options, {:forward_agent => true, user: fetch(:user), keys: %w( ssh key在本机的路径 ) }
set :format, :pretty
# 设置日志级别
set :log_level, :info
# 设置保存的版本数量,一般为5
set :keep_releases, 5
# 自定义的一些任务
namespace :deploy do
# 清除缓存
desc "clear cache"
task :clear_cache do
on roles(:app, :web) do
execute("rm -rf #{deploy_to}/current/var/cache/")
execute("mkdir -p #{deploy_to}/current/var/cache/")
end
end
# 改变项目所属组
desc "change group"
task :change_group do
on roles(:app, :web) do
execute("sudo chown -R user:group #{deploy_to}/current")
end
end
# 上传配置文件 , 将本地文件 lib/App/Config/config.yml 上传到服务器 #{deploy_to}/current/app/config/
desc "Upload config.yml"
task :upload_config_yml => 'lib/App/Config/config.yml' do |t|
on roles(:all) do
upload!(t.prerequisites.first, "#{deploy_to}/current/app/config/")
end
end
after :finishing, :upload_parameter_yml
after :finishing, :clear_cache
```
Capistrano 检查命令,编辑好Capistrano脚本后。先自己运行命令检查
cap deploy:check
如果报错,编辑 Capfile 文件,在最后添加 Rake::Task[:production].invoke
查看Capistrano全部任务
cap -T
Capistrano 回滚
cap deploy:rollback
Capistrano 发布代码
cap production deploy
本作品采用《CC 协议》,转载必须注明作者和本文链接