0

作为一个项目的唯一开发人员,我正在尝试使用 git 制定一个简单的开发和部署工作流程,并受限于使用单个服务器进行登台和生产。

生产路径是/var/www/vhosts/site.com

分期路径是/var/www/vhosts/staging.site.com

我了解如何为登台创建一个分支,并且最好在服务器上拥有主要(实时站点代码)和集线器(克隆代码库)存储库,然后从集线器创建一个本地工作克隆。但是我如何创建一个/var/www/vhosts/同时服务于生产和登台的 git 存储库?我需要单独的回购吗?

4

2 回答 2

1

从本文中,您有一个名为“hub”的主要裸存储库。“prime”存储库和您计算机上的存储库是“hub”的克隆。

在您的情况下,您有两个“主要”存储库:一个是您的暂存区(“prime-staging”),一个是您的生产区(“prime-production”)。

结合使用文章中描述的钩子和此处描述的钩子(根据推送的分支采取特定操作),您的“prime-staging”或“prime-production”存储库将被更新。

'hub 存储库应该有两个分支:(masterstaging)与您的登台站点production相关联并与您的生产站点相关联。您将在 上完成所有工作master,并将这些更改推送到“集线器”,从而允许 git 挂钩更新暂存存储库。您将在实时环境中查看这些更改,进行所需的任何更改master并再次推送到“集线器”。一旦暂存站点看起来不错,您将执行以下操作:

git checkout production
git reset --hard master
git push origin production

现在,git hook 将看到生产分支已更新并相应地更新您的生产站点。(注意:假设集线器只是命名法,调用主存储库是标准的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.

于 2015-11-04T11:14:33.253 回答
1

您可以使用外部工作树并“即时”更改它们以用于裸存储库。

在您的服务器上设置裸存储库,然后为其创建一个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

这改编自我使用的单分支部署脚本。我没有测试它,所以它可能需要调整。

本质上,裸仓库运行钩子并检查推送是主推送(并部署生产)还是开发推送(并部署登台)。

您还可以扩展此钩子以在签出更改后调用构建工具以编译资产等等。我通常在一切完成后删除所有开发包、源代码和构建工具。

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

于 2015-11-04T11:24:40.020 回答