如何在两台服务器上使用单个 git repo:生产和测试?

如何在两台服务器上使用单个 git repo:生产和测试?

我们在测试服务器上有一个 git 存储库(我们称之为 test1)。存储库非常简单,只有 master,没有分支或任何花哨的东西。此存储库的目标是跟踪对 /etc/puppet 及其所有子文件夹的更改。它通常是干净的并与 head 同步。

现在,我们希望将 test1:/etc/puppet 中的所有内容复制到生产服务器(我们称之为 prod1),同时在两台机器之间保持适当的 git 工作流程。每当 test1 上的更改准备好用于生产时,我们都希望使用 git 将它们从 test1 推送到 prod1。这里的目标是如果出现任何问题,能够快速恢复 prod1 上的更改。

这是我目前所掌握的信息:

  1. 在 test1:/opt/puppet.git 上设置一个裸 git repo(git init --bare)作为中间服务器。
  2. 将数据从 test1:/etc/puppet 推送到裸机。
  3. 在 prod1 上,在 /etc/ppet 中初始化一个新的 repo
  4. 将 test1:/opt/puppet.git 裸机作为远程添加到 prod1:/etc/puppet
  5. 每当我们想要对生产应用变更时,将主数据从 test1 拉到 prod1。

您的想法是什么?我们应该继续使用单个 master 分支,还是需要创建一个新的 devel 分支?如果我们创建 devel 分支,我们如何将其与新创建的裸仓库一起使用?

答案1

如果我总结一下您的请求,您想要的是拥有一个具有 1 个 git 服务器的架构,该服务器接收来自用户的所有推送,并在准备就绪时自动推送到生产环境。

这正是基于 Gerrit 审查系统的架构所做的事情。工作流程如下:

  1. 从生产服务器中拉取 Git
  2. 您是否进行了本地更改
  3. Git 推送到测试服务器(始终在专用分支中)
  4. 为提交分配审阅者并添加额外的钩子来启动例如詹金斯上的烟雾测试(在安装阶段添加hakks)。
  5. 当审阅者接受了代码并且詹金斯冒烟测试没有问题时,如果仍然可以与主服务器进行简单合并,则会自动通过 gerrit 进行推送。

因此,这里的优点是,没有人(如果配置正确)可以在没有最低限度的审查和基本测试的情况下将代码推送到 master。因此,您从 prod 获得的 master 分支(几乎)总是干净的。

答案2

其实我自己已经把这个问题解决了。经过一些测试,我在 test1 上创建了一个中间裸 git 仓库 (git init --bare)。这将充当 git 服务器,可以随意接收和推送提交到 test1 + prod1 仓库。

为了实现这一点,我做了以下事情: 在 test1 机器上: 1. mkdir /opt/puppet.git 2. cd /opt/puppet.git 3. git init --bare 4. cd /etc/puppet(当前 git 仓库及实际代码所在位置) 5. useradd git && passwd git(允许从远程主机推送/拉取) 6. git remote add origin git@test1:/opt/puppet.git 7. git push origin --all 现在,我的所有代码都存储在 /opt/puppet.git 的裸仓库中 在产品1上 1. cd /etc 2. git clone git@test1:/opt/puppet.git 3. 如果我想提取最新的更改:git pull

相关内容