Capistrano에서 SCM을 사용하지 않고 로컬 파일 배포
6989 단어 capistrano3Capistrano
소개
리모트 서버로 Git를 사용할 수 없는 상황이라든지, CI 로컬로 빌드해 Git에는 커밋 하지 않는 때라든지, Capistrano로 로컬의 파일을 SCM 사용하지 않고 배포하고 싶을 때는 상당히 있지요.
Capistrano 3에서 SCM을 사용하지 않고 로컬 파일을 배포하는 정보는별로 없는 것 같아서 소개합니다.
capistrano-scm-copy
물론 스스로 가리가리 태스크를 쓰면 실현할 수 있습니다만, capistrano-scm-copy 라고 하는 Gem을 사용하면 매우 간단하게 실현할 수 있습니다.
CI 서비스Wercker가 내고 있는 Gem입니다.
capistrano-scm-copy를 사용하면 Capistrano 2 deploy_via :copy
처럼 보일 수 있습니다.
로컬로 tar
로 archive.tar.gz
라고 하는 파일을 작성해, 그것을 리모트 서버에 Upload 해 릴리스 패스에 전개하는 단순한 구조입니다.
사용법
앱
이번에 배포하는 앱은 기본적인 Ruby 애플리케이션을 생각하지만 Ruby가 아닌 프로젝트에서도 기본은 동일합니다.
다음과 같은 디렉토리 구성이 있습니다.
$ tree . -L 2
├── Gemfile
├── Gemfile.lock
├── bin
│ └── example
└── lib
└── example.rb
Capistrano 설정
Gemfile에 Capistrano의 Gem을 추가합니다.
Gemfilegroup :development, :test do
gem "capistrano"
gem "capistrano-scm-copy"
end
bnndle install
Capistrano 초기화를 수행합니다.
$ bundle install
$ bundle exec cap install STAGES=staging,production
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified
Capfile
에 require 'capistrano/copy'
를 추가합니다.
Capfile# Load DSL and set up stages
require 'capistrano/setup'
# Include default deployment tasks
require 'capistrano/deploy'
require 'capistrano/copy'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
새 디렉토리 구성
설치 후 디렉토리 구성은 다음과 같습니다.
숨겨진 파일도 표시됩니다.
$ tree . -a -L 2
.
├── .bundle
│ └── config
├── .gitignore
├── .vagrant
│ └── machines
├── Capfile
├── Gemfile
├── Gemfile.lock
├── Vagrantfile
├── bin
│ └── example
├── config
│ ├── deploy
│ └── deploy.rb
└── lib
├── capistrano
└── example.rb
11 directories, 11 files
config/deploy.rb
config/deploy.rb
에 배포 설정을 작성합니다.
config/deploy.rb# config valid only for current version of Capistrano
lock '3.4.0'
set :application, "example"
set :deploy_to, "~/example"
set :keep_releases, 5
set :log_level, :info
set :bundle_without, %i(development test)
# capistrano-scm-copyの設定
set :scm, :copy
옵션도 몇 가지 있습니다.
물론 스스로 가리가리 태스크를 쓰면 실현할 수 있습니다만, capistrano-scm-copy 라고 하는 Gem을 사용하면 매우 간단하게 실현할 수 있습니다.
CI 서비스Wercker가 내고 있는 Gem입니다.
capistrano-scm-copy를 사용하면 Capistrano 2
deploy_via :copy
처럼 보일 수 있습니다.로컬로
tar
로 archive.tar.gz
라고 하는 파일을 작성해, 그것을 리모트 서버에 Upload 해 릴리스 패스에 전개하는 단순한 구조입니다.사용법
앱
이번에 배포하는 앱은 기본적인 Ruby 애플리케이션을 생각하지만 Ruby가 아닌 프로젝트에서도 기본은 동일합니다.
다음과 같은 디렉토리 구성이 있습니다.
$ tree . -L 2
├── Gemfile
├── Gemfile.lock
├── bin
│ └── example
└── lib
└── example.rb
Capistrano 설정
Gemfile에 Capistrano의 Gem을 추가합니다.
Gemfilegroup :development, :test do
gem "capistrano"
gem "capistrano-scm-copy"
end
bnndle install
Capistrano 초기화를 수행합니다.
$ bundle install
$ bundle exec cap install STAGES=staging,production
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified
Capfile
에 require 'capistrano/copy'
를 추가합니다.
Capfile# Load DSL and set up stages
require 'capistrano/setup'
# Include default deployment tasks
require 'capistrano/deploy'
require 'capistrano/copy'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
새 디렉토리 구성
설치 후 디렉토리 구성은 다음과 같습니다.
숨겨진 파일도 표시됩니다.
$ tree . -a -L 2
.
├── .bundle
│ └── config
├── .gitignore
├── .vagrant
│ └── machines
├── Capfile
├── Gemfile
├── Gemfile.lock
├── Vagrantfile
├── bin
│ └── example
├── config
│ ├── deploy
│ └── deploy.rb
└── lib
├── capistrano
└── example.rb
11 directories, 11 files
config/deploy.rb
config/deploy.rb
에 배포 설정을 작성합니다.
config/deploy.rb# config valid only for current version of Capistrano
lock '3.4.0'
set :application, "example"
set :deploy_to, "~/example"
set :keep_releases, 5
set :log_level, :info
set :bundle_without, %i(development test)
# capistrano-scm-copyの設定
set :scm, :copy
옵션도 몇 가지 있습니다.
$ tree . -L 2
├── Gemfile
├── Gemfile.lock
├── bin
│ └── example
└── lib
└── example.rb
group :development, :test do
gem "capistrano"
gem "capistrano-scm-copy"
end
$ bundle install
$ bundle exec cap install STAGES=staging,production
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified
# Load DSL and set up stages
require 'capistrano/setup'
# Include default deployment tasks
require 'capistrano/deploy'
require 'capistrano/copy'
# Load custom tasks from `lib/capistrano/tasks` if you have any defined
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
$ tree . -a -L 2
.
├── .bundle
│ └── config
├── .gitignore
├── .vagrant
│ └── machines
├── Capfile
├── Gemfile
├── Gemfile.lock
├── Vagrantfile
├── bin
│ └── example
├── config
│ ├── deploy
│ └── deploy.rb
└── lib
├── capistrano
└── example.rb
11 directories, 11 files
# config valid only for current version of Capistrano
lock '3.4.0'
set :application, "example"
set :deploy_to, "~/example"
set :keep_releases, 5
set :log_level, :info
set :bundle_without, %i(development test)
# capistrano-scm-copyの設定
set :scm, :copy
exclude_dir
: 배포하지 않을 파일과 디렉터리를 지정할 수 있습니다 include_dir
: 배포할 파일과 디렉터리를 지정할 수 있습니다. 기본적으로 *
이므로 모든 파일이 배포됩니다 tar_verbose
: tar
명령의 중간 경과를 출력하는 옵션입니다. config/deploy/production.rb
이 샘플에서는 Vagrant로 만든 VM에 배포하는 설정을 작성했습니다.
적당히 읽어 주세요.
config/deploy/production.rb
role :server, %w(127.0.0.1)
set(
:ssh_options,
port: 2222,
auth_methods: %w(publickey),
keys: [File.expand_path("../../../.vagrant/machines/default/virtualbox/private_key", __FILE__)],
user: "vagrant"
)
배포
배포는 매우 간단하며 평소와 같이 명령을 실행하기 만하면됩니다.
bundle exec cap production deploy
이번 샘플이라면 배포 전에 Vagrant의 기동이 필요합니다.
vagrant up
결론
이번에 사용한 파일은 GitHub에 있습니다.
따라서 capistrano-scm-copy
를 사용하면 로컬 파일을 쉽게 배포 할 수 있습니다
네트워크에 제한이 있는 환경이나 CI로 빌드하는 애플리케이션 등에서 꼭 사용해 보세요
Reference
이 문제에 관하여(Capistrano에서 SCM을 사용하지 않고 로컬 파일 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/nownabe/items/24551dc11e6ce4140b37
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Capistrano에서 SCM을 사용하지 않고 로컬 파일 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nownabe/items/24551dc11e6ce4140b37텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)