从git部署的最佳方式

时间:2013-09-02 09:58:02

标签: php git deployment sysadmin gitlab

我们使用git工作流程在不同的开发人员团队中工作,如下所示:

  1. 收票
  2. git pull / checkout
  3. 创建功能/错误修正分支
  4. 进行更改
  5. 提交分支
  6. 合并到测试分支,git pull to test environment
  7. 在与实时相同的环境中进行测试
  8. 如果测试成功,请合并到证明,git pull to proof
  9. 客户注销
  10. 合并生活
  11. git pull on live
  12. 但是,我无法决定开发人员将更改提取到实时服务器的最佳方式。

    目前,开发人员通过SSH连接到实时服务器(使用单个用户帐户)并执行git pull - 但是他们需要对服务器上的代码库具有读/写访问权限。

    我不喜欢这个,因为只有一个人(或系统管理员)必须执行部署。

    另一种方法是创建一个Web可访问的git pull脚本,因此当开发人员想要执行pull操作时,脚本会在服务器上执行git pull并输出到浏览器。

    在我看来,最好的替代方案是在推送repo时触发钩子 - 我们使用gitlab所以我认为这个实现相对简单,Web服务器上的脚本接收包含信息的POST对象关于存储库,因此如果接收到挂钩的分支已经更新(如果有意义的话),它可以编写脚本以仅触发拉取。也可以使用git pull消息的输出向发送推送的用户发送电子邮件,以确保一切按计划进行。 但是我很不舒服,开发人员可能会意外地推送到错误的分支并且提交过早生效 - 理想情况下应该有某种github样式的合并请求功能。

    有没有人有任何其他建议或建议?

3 个答案:

答案 0 :(得分:1)

我们希望使用Gerrit进行代码审核。 Gerrit实例位于中央Git存储库之上,让项目负责人审核内容。审核并接受提交后,Jenkins CI启动,自动代码样式检查,单元测试,自动生成API文档等,最后使用Apache Ant脚本进行部署(如果所有测试都已通过)。这是一个相当复杂的设置,但我们已经开始喜欢它了。

These很棒tutorials详细了解设置。

答案 1 :(得分:1)

在工作中我们使用capistrano + webistrano。虽然它是基于ruby的,并且许多功能都是特定于ruby的,但它可以完美地满足我们的需求。

以下是我们的工作流程:

1-5:与您的相同

6:转到dev webistrano - >选择分支 - >部署

7:客户端签名等

8:转到live webistrano - >选择分支 - >部署

它还支持部署脚本和其他一些东西。使用部署脚本,我们使用shared文件夹和current文件夹。部署脚本为共享文件夹创建符号链接,该文件夹包含库和git存储库中没有的其他内容。

这是sample deploy script for magento

Jenkins是持续整合的另一种选择。与capistrano(自动化测试执行)相比,它支持一些额外的东西,所以它可能值得一试。

答案 2 :(得分:0)

除了您在流程中发现的问题之外,我还要关注并行更改冲突并在“证明”环境中创建无效测试。

Say Bob将变更#1改为Proof,然后Dave将变更#2变为Proof,然后客户端测试更改#1(针对#1和#2的代码库),当你将变更#1变为Live时,你有效地提取未经测试的代码。

我建议考虑不可变构建和构建工件。我的一位同事写了一篇关于this topic的好文章。您的流程的主要变化是:

  • 1-5 :(相同)
  • 6 :从Test分支中检索;捕获构建工件;将构建工件部署到Test
  • 7 :(相同)
  • 8 :促进构建到证明;部署构建工件
  • 9 (同)
  • 10 促进生活建设;部署构建工件

您还应该考虑使用像Inedo BuildMaster这样的部署/交付自动化工具。免费版本应该超出您的需要,它将帮助您从“登录并运行脚本”到“在适当的批准后单击按钮”。

免责声明:我为Inedo

工作