- プッシュ式のリリースがやりたくてcapistrano_rsync_with_remote_cacheを使ってみた
- 実行サーバーにソースコードを持って来てrsyncで差分を各デプロイ対象のサーバーに振りまける
- 詳細はいろいろと書いてある記事があるので参照した
導入
- Gemfilesに以下を追加
gem 'capistrano_rsync_with_remote_cache'
- deploy/configに以下を追加
set :deploy_via, :rsync_with_remote_cache
問題:ssh_optionsがサポートされていない
問題の内容
- 使ってみるとrsyncのオプションでuserとportしか使われず、ssh_optionsが設定されない(該当コード)
- 例えばsshの鍵認証したいからと思ってssh_optionsを設定しても反映されずにrsyncが失敗する
対処方法1
- .ssh/configあたりで対象サーバーの設定を書いておく
- => でも、動的にサーバーが変更になる場合に面倒くさい、外部環境に依存するのも嫌な感じ
対処方法2【今回採用】
-
githubリポジトリをforkしてきて修正(修正したリポジトリ)
-
オリジナルリポジトリは3年前くらいから更新されておらず、pull requestも受け入れられていない感じなので
-
修正内容2:ssh_optionsを利用するように(そんなに良い修正ではない)
-
Gemfileで修正したcapistrano_rsync_with_remote_cacheを指定
gem 'capistrano_rsync_with_remote_cache', :git => 'https://github.com/mechamogera/capistrano_rsync_with_remote_cache.git'
- capistranoで以下のように利用
ssh_options[:keys] = ["test.pem"]
set :rsync_ssh_options, ENV['SOCKS5_USER'] ? %Q!-o ProxyCommand="/bin/env connect -S socks5.server:1080 %h %p" ! : ""
おまけ:capistrano3でのプッシュ式のリリースについて
- capistrano_rsync_with_remote_cacheも含めサポートされてないみたい
- 自分で実装する必要があるみたい
- ruby - Capistrano 3 copy strategy equivalent - Stack Overflow
- Deploy fails without SCM (:scm, :none) · Issue #777 · capistrano/capistrano<