You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.2 KiB
130 lines
4.2 KiB
# config valid only for current version of Capistrano |
|
lock "3.6.1" |
|
|
|
set :application, "cdao-pjet" |
|
set :repo_url, "[email protected]:CDAsia/cdao-pjet.git" |
|
set :branch, "master" |
|
set :deploy_to, -> { "/var/www/#{fetch(:application)}" } |
|
|
|
# Default value for :linked_files is [] |
|
set :docker_copy_data, fetch(:linked_files, []).push(".env", |
|
"config/application.yml") |
|
|
|
# Default value for keep_releases is 5 |
|
set :keep_releases, 5 |
|
|
|
set :log_level, :info |
|
|
|
set :bundle_flags, "--deployment --quiet" |
|
|
|
set :docker_role, :web |
|
set :docker_compose, true |
|
set :docker_compose_up_services, "--remove-orphans --scale web=3 load_balancer" |
|
set :docker_compose_project_name, -> { fetch(:application) } |
|
set :docker_assets_precompile_command, -> { |
|
["bundle exec rake assets:precompile", |
|
"bundle exec rake assets:non_digested", |
|
"bundle exec rake assets:clean"].join(" && ") |
|
} |
|
set :docker_migrate_command, -> { "bundle exec rake db:migrate" } |
|
set :docker_compose_path, -> { release_path.join(fetch(:docker_compose_file)) } |
|
|
|
namespace :deploy do |
|
desc "Fix repo" |
|
task :set_origin_url do |
|
on roles(:all) do |
|
if File.directory?(deploy_path.join("repo")) |
|
execute "cd #{fetch(:deploy_to)}/repo && git remote set-url origin #{fetch(:repo_url)}" |
|
end |
|
end |
|
end |
|
|
|
desc "Load ENV on figaro" |
|
before :starting, :set_figaro_env do |
|
run_locally do |
|
opts = { |
|
environment: fetch(:rack_env, fetch(:rails_env, "production")), |
|
path: "config/application.yml" |
|
} |
|
Figaro.application = Figaro::Application.new(opts) |
|
Figaro.load |
|
end |
|
end |
|
end |
|
|
|
namespace :docker do |
|
namespace :rails do |
|
def docker_compose_execute(exec) |
|
cmd = ["run --rm"] # --rm, Remove container after run |
|
cmd.unshift("-p #{fetch(:docker_compose_project_name)}") unless fetch(:docker_compose_project_name).nil? |
|
cmd.unshift("-f #{fetch(:docker_compose_path)}") |
|
cmd << "web bash -c '#{exec}'" |
|
|
|
cmd.join(" ") |
|
end |
|
|
|
task :bundle do |
|
on release_roles(fetch(:docker_role)) do |
|
within release_path do |
|
options = [] |
|
# options << "--gemfile #{fetch(:bundle_gemfile)}" if fetch(:bundle_gemfile) |
|
# options << "--path #{fetch(:bundle_path)}" if fetch(:bundle_path) |
|
unless test(:'docker-compose', docker_compose_execute("bundle check #{options.join(' ')}")) |
|
# options << "--binstubs #{fetch(:bundle_binstubs)}" if fetch(:bundle_binstubs) |
|
# options << "--jobs #{fetch(:bundle_jobs)}" if fetch(:bundle_jobs) |
|
# options << "--without #{fetch(:bundle_without)}" if fetch(:bundle_without) |
|
# options << fetch(:bundle_flags).to_s if fetch(:bundle_flags) |
|
execute :'docker-compose', docker_compose_execute("bundle install #{options.join(' ')}") |
|
end |
|
end |
|
end |
|
end |
|
|
|
namespace :assets do |
|
task :precompile do |
|
on release_roles(fetch(:docker_role)) do |
|
within release_path do |
|
execute :'docker-compose', docker_compose_execute(fetch(:docker_assets_precompile_command)) |
|
end |
|
end |
|
end |
|
end |
|
|
|
namespace :db do |
|
task :migrate do |
|
on release_roles(fetch(:docker_role)) do |
|
within release_path do |
|
execute :'docker-compose', docker_compose_execute(fetch(:docker_migrate_command)) |
|
end |
|
end |
|
end |
|
end |
|
|
|
def _compose_option_up_services |
|
opt = fetch(:docker_compose_up_services) |
|
opt.nil? ? "" : opt |
|
end |
|
|
|
def compose_start_command |
|
cmd = %w[up -d --remove-orphans] |
|
cmd << _compose_option_up_services |
|
cmd.unshift _compose_option_project_name |
|
cmd.unshift _compose_option_compose_path |
|
|
|
cmd.join(" ") |
|
end |
|
end |
|
end |
|
|
|
# Sentry deployment notificationt |
|
set :sentry_api_token, ENV["SENTRY_API_TOKEN"] |
|
set :sentry_organization, ENV["SENTRY_ORGANIZATION"] |
|
set :sentry_project, ENV["SENTRY_PROJECT"] |
|
|
|
before "deploy:starting", "sentry:validate_config" |
|
after "deploy:published", "sentry:notice_deployment" |
|
|
|
after "deploy:check:directories", "deploy:set_origin_url" |
|
after "docker:deploy:compose:build", "docker:rails:bundle" |
|
after "docker:rails:bundle", "docker:rails:db:migrate" |
|
after "docker:rails:bundle", "docker:rails:assets:precompile"
|
|
|