如何在部署到分段和生产的单个服务器上设置单个git源

时间:2015-11-04 10:54:20

标签: git server staging dev-to-production

作为项目的唯一开发人员,我尝试使用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仓库?我需要单独的回购吗?

2 个答案:

答案 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

这已经改编自我使用的单分支部署脚本。 我没有测试因此可能需要进行调整。

本质上,裸仓库运行钩子并检查推送是否是主推(并部署生产)或开发推送(并部署升级)。

您还可以扩展此挂钩以在检出更改后调用构建工具来编译资产,而不是。一切都完成后,我通常会删除所有开发包,源代码和构建工具。

编辑:如果您需要将单个分支推送到多个部署位置,则此操作无效。不确定哪些参数可以通过推送发送,或者是否可以某种方式使用远程名称。