作为项目的唯一开发人员,我尝试使用git来破坏简单的开发和部署工作流,受限于使用单个服务器进行分段和生产。
生产路径为/var/www/vhosts/site.com
登台路径为/var/www/vhosts/staging.site.com
我了解如何为暂存创建分支,并且最好在服务器上拥有prime (live site code) and hub (clone codebase) repos,然后从集线器创建本地工作克隆。但是如何在/var/www/vhosts/
中创建一个同时为生产和分段提供服务的git仓库?我需要单独的回购吗?
答案 0 :(得分:1)
从文章中,您有一个名为“hub”的主要裸存储库。 'prime'存储库和计算机上的存储库是'hub'的克隆。
在您的情况下,您有两个“主要”存储库:一个是您的临时区域('prime-staging'),另一个是您的生产区域('prime-production')。
使用文章中描述的钩子和描述here的钩子的组合(根据推动的分支采取某种行动),你的“初级阶段”或“初级生产”储存库将更新。
'hub存储库应该有两个分支:master
(或staging
)与您的暂存站点相关联,production
与您的生产站点相关联。您将在master
上完成所有工作,并将这些更改推送到“hub”,允许git挂钩更新staging存储库。您可以在实时环境中查看这些更改,在master
上进行任何更改并再次推送到“hub”。一旦登台网站看起来不错,您可以这样做:
git checkout production
git reset --hard master
git push origin production
现在,git hook将看到生产分支已更新并相应地更新您的生产站点。 ( NB:假设集线器只是命名法,调用主存储库origin
是标准的)
所以我在服务器上设想的设置是:
mkdir -p /path/to/site.git
cd /path/to/site.git #// hub
git init --bare
cd /var/www/vhosts
git clone /path/to/site.git site.com #// prime-production
git clone /path/to/site.git staging.site.com #// prime-staging
您将挂钩放在site.git
中。更新staging
分支后,请更改为/var/www/vhosts/staging.site.com
并执行git pull
。为production
更新/var/www/vhosts/site.com
分支时也一样。
答案 1 :(得分:0)
您可以使用外部工作树并在运行中更改它们#34;对于裸回购。
在您的服务器上设置裸仓库,然后为其创建post-receive
挂钩以进行部署。
#!/bin/bash
# post-receive
# deploy production and staging to vhost dirs
# Directory we are deploying to. Should be the directory where the repo's root .gitignore would exist in.
PRODDEST="/path/to/destination/of/production"
STAGDEST="/path/to/destination/of/staging"
while read oldrev newrev refname; do
# Grab the name of the branch that was pushed.
branch=$(git rev-parse --symbolic --abbrev-ref $refname)
if [ "master" = "$branch" ]; then
echo "Master push, deploy production..."
GIT_WORK_TREE=$PRODDEST git checkout -f master
GIT_WORK_TREE=$PRODDEST git clean -fd
elif [ "develop" = "$branch" ]; then
echo "Develop push, deploy staging..."
GIT_WORK_TREE=$STAGDEST git checkout -f develop
GIT_WORK_TREE=$STAGDEST git clean -fd
fi
done
这已经改编自我使用的单分支部署脚本。 我没有测试因此可能需要进行调整。
本质上,裸仓库运行钩子并检查推送是否是主推(并部署生产)或开发推送(并部署升级)。
您还可以扩展此挂钩以在检出更改后调用构建工具来编译资产,而不是。一切都完成后,我通常会删除所有开发包,源代码和构建工具。
编辑:如果您需要将单个分支推送到多个部署位置,则此操作无效。不确定哪些参数可以通过推送发送,或者是否可以某种方式使用远程名称。