介紹 Capistrano
deploy manage
deploy rollback
with ci system
manual deplay
進化
automatic deploy
部署要做的事
- 
	
備份 / 更新資料庫
 - 
	
更新程式碼
 - 
	
更新設定檔
 - 
	
例行性指令
- 
		
重啟 service
 - 
		
清除 cache
 
 - 
		
 
Tool
- 
	
Ansible
 - 
	
Chef
 - 
	
Capitrano
 
What is Capistrano?
Capistrano
require 'capistrano/setup'
require 'capistrano/deploy'
require 'capistrano/bundler'
require 'capistrano/rails/migrations'
require 'capistrano/rails/assets'
常見用途
- 
	
automated configuration manage
 - 
	
database migration
 - 
	
etc...
 
more detail...
Stages
- 
	
dev
 - 
	
QA
 - 
	
Staging
 - 
	
Production
 
execute different stage
cap dev deploy
cap sandbox deploy
cap production deployServer manage
# server-based syntax
# ======================
server 'dev.horidashi.com', user: 'ubuntu', roles: %w{app db web}, primary: true
# server 'example.com', user: 'deploy', roles: %w{app web}, other_property: :other_value
# server 'db.example.com', user: 'deploy', roles: %w{db}
Role manage
# role-based syntax
# ==================
role :app, %w{ubuntu@dev.horidashi.com}
role :web, %w{ubuntu@dev.horidashi.com}
role :db,  %w{ubuntu@dev.horidashi.com}set :default_env, { path: "/home/ubuntu/.nvm/versions/node/v4.4.7/bin/:$PATH" }
# Default value for keep_releases is 5
# set :keep_releases, 5
set :keep_releases, 10
namespace :setup do
  desc "Upload config file."
  task :upload_config do
    on roles(:app) do
      execute "mkdir -p #{shared_path}/config"
      upload! StringIO.new(File.read("config/database.yml")), "#{shared_path}/config/database.yml"
    end
  end
endconfig/deploy.rb
namespace :deploy do
  task :restart do
    on roles(:web) do
      site_dir = "#{current_path}";
      within site_dir do
        puts capture(:env)
        puts capture(:npm, 'i')
        puts capture(:bower, 'i')
        puts capture(:grunt, 'build')
        puts capture(:pm2, 'restart', 'hub')
      end
    end
  end
  before :deploy, "deploy:env"
  after :deploy, "deploy:restart"
end
Custom task
other config set up
set :ssh_options, {
   keys: %w(/home/ubuntu/.ssh/id_rsa),
   forward_agent: true,
   auth_methods: %w(publickey password)
 }
set :application, 'hub'
set :user, "ubuntu"
set :deploy_to, '/home/ubuntu/service/hub'
set :repo_url, 'git@bitbucket.org:adplayhubteam/hub.git'
set :branch, "master"
after "deploy", "deploy:cleanup"
append :linked_files, 'config/database.yml', 'config/secrets.yml'
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system'
rollback for what?
- 
	
code
 - 
	
database
 
rollback code

structure
cap production deploy:rollback ROLLBACK_RELEASE=20160614133327execute commend
rollback database
# db/migrate/20160801115659_adplay.rb
class Adplay < ActiveRecord::Migration[5.0]
  def change
     add_column :adplays, :google_play_url, :string
     add_column :adplays, :itunes_url, :string
  end
endmigration script
cap production db:rollback STEP=1execute commend
transaction
ci todo
- 
	
vm server
 - 
	
webhook
 - 
	
Build Scheduler
 - 
	
Notification
 - 
	
permissions
 - 
	
Report
 
介紹 Capistrano
By alincode
介紹 Capistrano
- 1,639