在源云存储库之间传输时如何排除某些文件?

问题描述

目前,我有两个Google Cloud项目,一个用于暂存环境,另一个用于生产环境。他们每个人都有一个源云存储库。每当我完成开发后,我都会将代码合并到登台环境中的仓库的主分支中,然后它将启动云构建触发器,该触发器将所有代码从登台环境中的仓库复制到仓库中的仓库中。生产环境。

有些配置文件和凭据文件在不同的环境中应该有所不同,因此我不想复制它们,否则它将覆盖生产库中与环境相关的文件。这是我在cloudbuild.yaml中的尝试:

steps:
    - name: gcr.io/cloud-builders/git
      args: ['checkout','--orphan','temp']
    - name: gcr.io/cloud-builders/git
      args: ['add','-u']
    - name: gcr.io/cloud-builders/git
      entrypoint: "bash"
      args:
        - '-c'
        - |
        - git reset `cat .gitcopyignore`
    - name: gcr.io/cloud-builders/git
      args: ['config','--global','user.name','<name>']
    - name: gcr.io/cloud-builders/git
      args: ['config','user.email','<email>']
    - name: gcr.io/cloud-builders/git
      args: ['commit','-am','latest production commit']
    - name: gcr.io/cloud-builders/git
      args: ['branch','-D','master']
    - name: gcr.io/cloud-builders/git
      args: ['branch','-m','master']
    - name: gcr.io/cloud-builders/git
      args: ['push','-f','https://source.developers.google.com/p/<production project>/r/<production repo>','master']

我将所有与环境相关的文件放入.gitcopyignore文件中,并在git reset之后在它们上运行git add,以防止它们被复制到新的仓库中。但是,每次执行此触发器时,都会说所有步骤都已成功执行,但是生产环境中与环境相关的文件仍然被覆盖。

我不想将这些文件添加.gitignore中,因为我确实希望在暂存环境的存储库中保留版本控制,以防万一我的队友想要修改它们。更重要的是,这些与环境相关的文件必须位于存储库中,因为google cloud必须先从源云存储库中提取所有代码,然后才能部署云功能

任何人都可以告诉我如何对我的cloudbuild.yaml进行修复吗?已经困扰了我好几天了。

谢谢!

解决方法

通常,尝试维护两个单独的存储库可能是一堆不必要的工作,并且还可能导致存储库不必要地分散。

保持配置不同的建议方法是将模板存储在存储库中,然后将其复制到位,使用脚本对其进行修改,或者存储多个配置文件,然后手动或通过复制正确的配置文件。脚本根据环境而有所不同。目标文件(实际使用的版本)应该放在.gitignore中,因为您不想直接检入它们。我敢肯定,大多数平台都可以处理这种方法,因为它很常见并且是最佳实践。

这意味着您将拥有一个包含所有文件和相似历史记录的存储库。您无需担心意外分散的情况。