首页 > 解决方案 > 通过 git 子模块管理厨师食谱

问题描述

目前,我正在尝试通过 git 子模块管理我所有的食谱,我只是想确保我的组织方式不会有任何未来的问题。

我考虑到从可管理性的角度来看,将所有存储库放在一个篮子(一个厨师存储库)中并不流行,但我也不想告诉我的开发人员他们将不得不单独管理和在测试他们的代码时执行厨师运行之前拉/克隆每个 repo(我们也在使用 berks 和厨师服务器)。

所以下面的 git 子模块策略是我的解决方案:

chef-repo < main >
├── chef-repo/LICENSE
├── chef-repo/README.md
├── chef-repo/chefignore
├── chef-repo/cookbooks
│   ├── chef-repo/cookbooks/README.md
│   ├── chef-repo/cookbooks/active-directory < submodule >
│   │   ├── chef-repo/cookbooks/active-directory/Berksfile
│   │   ├── chef-repo/cookbooks/active-directory/attributes
│   │   │   └── chef-repo/cookbooks/active-directory/attributes/default.rb
│   │   │   ├── chef-repo/cookbooks/active-directory/libraries/cmd_helper.rb
│   │   ├── chef-repo/cookbooks/active-directory/recipes
│   │   └── chef-repo/cookbooks/active-directory/resources
│   │       ├── chef-repo/cookbooks/active-directory/resources/computer.rb
│   ├── chef-repo/cookbooks/example
│   ├── chef-repo/cookbooks/java < submodule >
│   │   ├── chef-repo/cookbooks/java/Berksfile
│   │   ├── chef-repo/cookbooks/java/recipes
│   │   ├── chef-repo/cookbooks/java/templates
│   ├── chef-repo/cookbooks/redhat_subscription_manager < submodule >
│   └── chef-repo/cookbooks/windows < submodule >
├── chef-repo/data_bags
├── chef-repo/environments
├── chef-repo/roles

我知道子模块也不是很受欢迎,所以我只是采用这种方法,以便开发人员可以将整个 chef-repo 拉取并克隆为一个整体,但他们会将代码提交到单个 repos。

有没有更好的方法来做到这一点?

谢谢 :)

标签: gitchef-infra

解决方案


更好的方法?子模块就足够了,即使您可以查看子树(我在这里说明

但是对于子模块,特别是如果您的贡献者仍在其各自子模块存储库的主分支上,请不要忘记命令:

git submodule update --remote --recursive

这足以将所有子模块更新到它们在master.


推荐阅读