我使用Capistrano 3来部署我的WordPress项目(在Bedrock WP堆栈中实现:https://github.com/roots/bedrock)。
WordPress专门支持更新生产/登台站点的实际代码(插件更新,某些插件的设置文件等)的许多功能,并且在各种情况下我可能希望将这些代码更改提交到项目GIT直接从服务器回购。
所以,问题是,有没有办法配置Capistrano Deploy将.git repo保留在relase目录中?
我认为这对第2章中的“复制策略”设置是可行的,但我找不到关于第3章的任何信息。
答案 0 :(得分:0)
我通过修改https://github.com/Mixd/wp-deploy项目实施的自定义部署策略解决了这个问题。
请注意已更改的context.execute
行。
# Usage:
# 1. Drop this file into lib/capistrano/submodule_strategy.rb
# 2. Add the following to your Capfile:
# require 'capistrano/git'
# require './lib/capistrano/submodule_strategy'
# 3. Add the following to your config/deploy.rb
# set :git_strategy, SubmoduleStrategy
module SubmoduleStrategy
# do all the things a normal capistrano git session would do
include Capistrano::Git::DefaultStrategy
# check for a .git directory
def test
test! " [ -d #{repo_path}/.git ] "
end
# same as in Capistrano::Git::DefaultStrategy
def check
test! :git, :'ls-remote', repo_url
end
def clone
git :clone, '-b', fetch(:branch), '--recursive', repo_url, repo_path
end
# same as in Capistrano::Git::DefaultStrategy
def update
git :remote, :update
end
# put the working tree in a release-branch,
# make sure the submodules are up-to-date
# and copy everything to the release path
def release
release_branch = fetch(:release_branch, File.basename(release_path))
git :checkout, '-B', release_branch,
fetch(:remote_branch, "origin/#{fetch(:branch)}")
git :submodule, :update, '--init'
# context.execute "rsync -ar --exclude=.git\* #{repo_path}/ #{release_path}"
context.execute "rsync -ar #{repo_path}/ #{release_path}"
end
end
此解决方案现在根据版本ID将版本作为GIT仓库设置部署到自定义分支。
然后可以将其提交并推送到主仓库,以便根据需要进行合并。
所有荣誉归功于WP-Deploy项目的创建者Aaron Thomas。