Linux
使用 git 管理 puppet 模組
我有一個執行在 Debian 7 上的 puppet/foreman 伺服器來管理我的系統。我使用 puppet 和 foreman 1.6.0 的社區版本 3.7。我使用目錄環境。
目前,我為自己編寫的模組使用了一個相當複雜的工作流程,在我的開發環境中創建它們,這是受顛覆控制的,然後將它們導出到外部目錄,建構它們的 puppet 模組(puppet module build …)和在生產中安裝它。我考慮過使用顛覆將它們分支/標記到生產中,但當時出於我不記得的原因排除了這一點。
同時我學了一點 git,我寧願使用 git 而不是 subversion。我現在的問題是,是否有最佳做法可以這樣做?我可以想像至少有兩種方法,它們各有利弊。一種是將環境開發置於版本控制之下,然後將其複製/分支到生產環境。其次是為每個模組創建一個 git repo,並將它們複製到環境中。
正如我所說,我是 git 新手,所以我對它的優缺點一無所知。此外,我只使用 puppet 和 foreman 大約 8 個月。
乾杯,克里斯托夫
答案實際上取決於您想要的版本控制方式。主要有以下幾種方法:
- 將所有內容存放在一個平面 Git 儲存庫中,然後將其複製到您的主伺服器(或節點,如果您正在執行無主伺服器)。
這是迄今為止最簡單的選項,但意味著您將在生產和開發環境中擁有同一模組的多個副本(儘管您可以使用符號連結繞過它)。
- 將您的主要 Puppet 程式碼放在一個 Git 儲存庫中,Git 子模組指向您的自定義模組。部署與上面相同,只是添加
--recursive
了git clone
.這種方法的優點是您可以輕鬆引用外部模組(例如PuppetLabs Apache e 模組)並且相對容易拉入上游更改,但您也必須處理 Git 子模組的成本,這些子模組出了名的混亂.
- 執行您自己的 Puppet Forge,並使用Librarian-puppet或R10K來管理您的模組的安裝。
這樣做的好處是能夠通過SemVer完全控制模組的版本,而無需公開發布它們——儘管滾動你自己的 Puppet Forge 仍然被某些人認為是“前沿”。