使用版本为 =capistrano 3.3.5= , Capistrano 安装方法自行 Google. ** 项目中初始化 Capistrano =cap install= 会生成如下目录文件: #+BEGIN_SRC ├── Capfile ├── config │ ├── deploy │ │ ├── production.rb │ │ └── staging.rb │ └── deploy.rb └── lib └── capistrano └── tasks #+END_SRC 其中, - =Capfile= 用来配置 Capistrano - =deploy.rb= 定义共用的 tasks - =production.rb/staging.rb= 定义具体的 stage 的 tasks ** 新建 stages =cap install STAGES=local,sandbox,qa,production= , =local,sandbox,qa,production= 等可以自行定义 ** 用法 - =cap -T= 列出所有 tasks - =cap staging deploy= 部署 staging 环境 - =cap production deploy= 部署 production 环境 - =cap production deploy --dry-run= 模拟部署 production 环境,但实际上不作任何操作 (?) - =cap production deploy --prereqs= 列出 task dependencies - =cap production deploy --trace= 跟踪 task 调用 (?) ** 服务器文件结构 在 =config/deploy.rb= 中可定义文件根目录: #+BEGIN_SRC set :deploy_to, '/var/www/my_app_name' #+END_SRC 那么部署之后, =/var/www/my_app_name= 的文件结构将会如下: #+BEGIN_SRC ├── current -> /var/www/my_app_name/releases/20150120114500/ ├── releases │ ├── 20150080072500 │ ├── 20150090083000 │ ├── 20150100093500 │ ├── 20150110104000 │ └── 20150120114500 ├── repo │ └── ├── revisions.log └── shared └── #+END_SRC 其中, - =current= 是指向最新版本的指针 - =releases= 存放了所有版本的文件,并以时间戳命名。 =current= 指针指向这些目录中的一个。 - =repo= 存放版本管理系统的配置。如果是 Git 则会是一个完整的 git repository. - =revisions.log= 记录每次 deploy 或者 rollback. - =shared= (?) ** 配置 *** 配置文件 - 全局: =config/deploy.rb= - 针对特定 stage: =config/deploy/.rb= *** 变量存取 #+BEGIN_SRC set :application, 'MyLittleApplication' # use a lambda to delay evaluation set :application, -> { "SomeThing_#{fetch :other_config}" } #+END_SRC #+BEGIN_SRC fetch :application # => "MyLittleApplication" fetch(:special_thing, 'some_default_value') # will return the value if set, or the second argument as default value #+END_SRC *** 变量定义 - =:application= application 名称 - =:deploy_tp= 远端服务器部署的根目录。 =default: -> { "/var/www/#{fetch(:application)}" }= - =:scm= 所使用的版本管理系统。 =default: :git= - =:repo_url= 代码库的 url - =:repo_path= 远端服务器代码存放路径。 =default: -> { "#{fetch(:deploy_to)}/repo" }= - =:repo_tree= - =:linked_files= - =:linked_dirs= - =:default_env= - =:branch= - =:keep_releases= - =:tmp_dir= - =:local_user= - =:pty= - =:log_level= - =:format=