具有 GitHub 流程的开发和生产环境
Development and Production Environments with GitHub flow
在工作中,我们现在使用 GitHub,并使用 GitHub 流程。我对GitHub流程的理解是有master分支和feature分支。与 git 流程不同,没有开发分支。
这对我们已经完成的项目非常有效,并且简化了事情。
但是,对于我们的产品,我们有开发和生产环境。对于生产环境,我们使用master
分支,而对于开发环境,我们不知道如何做?
我唯一能想到的是:
- 当分支与 master 合并时,使用 GitHub 操作重新部署 master。
- 当推送另一个分支时,设置一个 GitHub 操作,以便将任何其他分支(master 除外)部署到此环境。
目前,对于需要开发环境的项目,我们基本上使用 git 流程(功能 -> 开发 -> 大师)。
您认为我的想法合理吗,如果不合理,您有什么建议?
编辑:
澄清一下,我问的是使用 GitHub Flow 而不是 git flow[ 实现开发的最佳方法=36=].
Nathan,添加一个开发分支是个好主意,您可以在新分支中处理开发更改并在开发环境中测试它们,在获得签核以移动到生产环境后,您可以在主分支中合并您的更改。
不要忘记在合并的 master 分支上执行回归测试,以测试旧功能和新功能是否正常工作,然后再发布您的代码以在生产中安装
根据我的经验,GitHub Flow 在多个环境中的工作方式如下。合并到 master 不会自动部署到生产环境。相反,合并到 master 会创建一个构建工件,该工件可以使用 ChatOps 工具通过环境进行提升。
例如,推送到 master
会创建一个名为 my-service-47cbd6c
的构建工件,它是服务名称和短提交哈希的组合。这被推送到某种工件存储库。然后可以使用诸如 ChatOps 样式的斜杠命令之类的工具来触发部署,将工件部署到各种环境中。例如,此工具还可以进行检查以确保不会跳过测试环境。最后,工件被提升到生产环境。
因此,对于 GitHub 操作的用例,我的建议是:
- 推送到
master
创建构建工件并自动将其部署到 开发 环境。
- 开发中测试
- 通过使用 slash 命令部署到生产环境来提升工件。操作 slash-command-dispatch 可以帮助您。
您也可以考虑 environments (as )
的概念
最近(2021 年 2 月),您可以:
您现在可以使用环境保护规则限制哪些分支可以部署到环境中。
When a job tries to deploy to an environment with Deployment branches configured Actions will check the value of github.ref against the configuration and if it does not match the job will fail and the run will stop.
The Deployment branches rule can be configured to allow:
- All branches – Any branch in the repository can deploy
- Protected branches – Only branches with protection rules
- Selected branches – Branches matching a set of name patterns
这意味着您可以定义要在开发环境中部署的作业,作为条件,该作业只会 运行 如果从给定分支推送的提交触发(master
你的情况)
对于任何面临相同问题或想要简化其流程以远离 gitflow 的人,我建议您查看 this article。虽然它没有明确谈论 Github 流程,但它确实有效地为 OP 提供了一种解决方案。
纯粹的人可能认为这不是严格意义上的 Gitflow,但在我看来,这是一个简单的调整,使部署和 CI/CD 策略在 git 中更加明确。我更喜欢这种方法,而不是向工具添加一些魔法,这会使开发人员更难遵循和理解流程。
我认为 Gitflow intro 也写得相当实用:
Different teams may have different deployment strategies. For some, it may be best to deploy to a specially provisioned testing environment. For others, deploying directly to production may be the better choice...
文章中的图表总结得很好:
所以这里我们有 Master == Gitflow main 并且有用的添加是临时发布分支,您可以从中部署到其他环境,例如开发。值得考虑的是你选择如何称呼这个临时分支,在上面它被认为是一个发布,在你的过程中它可能是一个测试分支等。
您可以保留或保留压缩和标记,并且工具会在团队之间发生变化。同样,您可能关心也可能不关心实际版本号。
这与 VonC 的答案相差不到一百万英里,不同之处在于流程定义更严格,更倾向于让多个开发人员合并到一个分支并应用修复,以便为新版本做好准备生产。很可能是您通过他的回答中的命名约定配置了这个临时分支的部署。
在工作中,我们现在使用 GitHub,并使用 GitHub 流程。我对GitHub流程的理解是有master分支和feature分支。与 git 流程不同,没有开发分支。
这对我们已经完成的项目非常有效,并且简化了事情。
但是,对于我们的产品,我们有开发和生产环境。对于生产环境,我们使用master
分支,而对于开发环境,我们不知道如何做?
我唯一能想到的是:
- 当分支与 master 合并时,使用 GitHub 操作重新部署 master。
- 当推送另一个分支时,设置一个 GitHub 操作,以便将任何其他分支(master 除外)部署到此环境。
目前,对于需要开发环境的项目,我们基本上使用 git 流程(功能 -> 开发 -> 大师)。
您认为我的想法合理吗,如果不合理,您有什么建议?
编辑:
澄清一下,我问的是使用 GitHub Flow 而不是 git flow[ 实现开发的最佳方法=36=].
Nathan,添加一个开发分支是个好主意,您可以在新分支中处理开发更改并在开发环境中测试它们,在获得签核以移动到生产环境后,您可以在主分支中合并您的更改。
不要忘记在合并的 master 分支上执行回归测试,以测试旧功能和新功能是否正常工作,然后再发布您的代码以在生产中安装
根据我的经验,GitHub Flow 在多个环境中的工作方式如下。合并到 master 不会自动部署到生产环境。相反,合并到 master 会创建一个构建工件,该工件可以使用 ChatOps 工具通过环境进行提升。
例如,推送到 master
会创建一个名为 my-service-47cbd6c
的构建工件,它是服务名称和短提交哈希的组合。这被推送到某种工件存储库。然后可以使用诸如 ChatOps 样式的斜杠命令之类的工具来触发部署,将工件部署到各种环境中。例如,此工具还可以进行检查以确保不会跳过测试环境。最后,工件被提升到生产环境。
因此,对于 GitHub 操作的用例,我的建议是:
- 推送到
master
创建构建工件并自动将其部署到 开发 环境。 - 开发中测试
- 通过使用 slash 命令部署到生产环境来提升工件。操作 slash-command-dispatch 可以帮助您。
您也可以考虑 environments (as
最近(2021 年 2 月),您可以:
您现在可以使用环境保护规则限制哪些分支可以部署到环境中。
When a job tries to deploy to an environment with Deployment branches configured Actions will check the value of github.ref against the configuration and if it does not match the job will fail and the run will stop.
The Deployment branches rule can be configured to allow:
- All branches – Any branch in the repository can deploy
- Protected branches – Only branches with protection rules
- Selected branches – Branches matching a set of name patterns
这意味着您可以定义要在开发环境中部署的作业,作为条件,该作业只会 运行 如果从给定分支推送的提交触发(master
你的情况)
对于任何面临相同问题或想要简化其流程以远离 gitflow 的人,我建议您查看 this article。虽然它没有明确谈论 Github 流程,但它确实有效地为 OP 提供了一种解决方案。
纯粹的人可能认为这不是严格意义上的 Gitflow,但在我看来,这是一个简单的调整,使部署和 CI/CD 策略在 git 中更加明确。我更喜欢这种方法,而不是向工具添加一些魔法,这会使开发人员更难遵循和理解流程。
我认为 Gitflow intro 也写得相当实用:
Different teams may have different deployment strategies. For some, it may be best to deploy to a specially provisioned testing environment. For others, deploying directly to production may be the better choice...
文章中的图表总结得很好:
所以这里我们有 Master == Gitflow main 并且有用的添加是临时发布分支,您可以从中部署到其他环境,例如开发。值得考虑的是你选择如何称呼这个临时分支,在上面它被认为是一个发布,在你的过程中它可能是一个测试分支等。
您可以保留或保留压缩和标记,并且工具会在团队之间发生变化。同样,您可能关心也可能不关心实际版本号。
这与 VonC 的答案相差不到一百万英里,不同之处在于流程定义更严格,更倾向于让多个开发人员合并到一个分支并应用修复,以便为新版本做好准备生产。很可能是您通过他的回答中的命名约定配置了这个临时分支的部署。