我们使用git工作流程在不同的开发人员团队中工作,如下所示:
但是,我无法决定开发人员将更改提取到实时服务器的最佳方式。
目前,开发人员通过SSH连接到实时服务器(使用单个用户帐户)并执行git pull - 但是他们需要对服务器上的代码库具有读/写访问权限。
我不喜欢这个,因为只有一个人(或系统管理员)必须执行部署。
另一种方法是创建一个Web可访问的git pull脚本,因此当开发人员想要执行pull操作时,脚本会在服务器上执行git pull并输出到浏览器。
在我看来,最好的替代方案是在推送repo时触发钩子 - 我们使用gitlab所以我认为这个实现相对简单,Web服务器上的脚本接收包含信息的POST对象关于存储库,因此如果接收到挂钩的分支已经更新(如果有意义的话),它可以编写脚本以仅触发拉取。也可以使用git pull消息的输出向发送推送的用户发送电子邮件,以确保一切按计划进行。 但是我很不舒服,开发人员可能会意外地推送到错误的分支并且提交过早生效 - 理想情况下应该有某种github样式的合并请求功能。
有没有人有任何其他建议或建议?
答案 0 :(得分:1)
我们希望使用Gerrit进行代码审核。 Gerrit实例位于中央Git存储库之上,让项目负责人审核内容。审核并接受提交后,Jenkins CI启动,自动代码样式检查,单元测试,自动生成API文档等,最后使用Apache Ant脚本进行部署(如果所有测试都已通过)。这是一个相当复杂的设置,但我们已经开始喜欢它了。
答案 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的好文章。您的流程的主要变化是:
您还应该考虑使用像Inedo BuildMaster这样的部署/交付自动化工具。免费版本应该超出您的需要,它将帮助您从“登录并运行脚本”到“在适当的批准后单击按钮”。
免责声明:我为Inedo
工作