Puppet
r10k:與 git 的正確合併工作流程
我目前正在以無主模式執行 Puppet。我正在使用r10k進行模組和環境部署。
簡化版:r10k 控制儲存庫有兩個分支:測試和生產。生產中的更改將自動分發到生產伺服器。對某些登台伺服器的測試進行了更改。
現在,如果我在測試中進行更改,有時我也必須更改 r10k 控制儲存庫。一個常見的例子是
Puppetfile
,目前在生產中看起來像這樣:forge 'forge.puppetlabs.com' # Forge modules mod 'puppetlabs/stdlib' mod 'puppetlabs/concat' mod 'saz/ssh' # Custom modules mod 'ownmodule1', :git => 'https://git.example.org/configuration/ownmodule1.git', :ref => 'production' mod 'ownmodule2', :git => 'https://git.example.org/configuration/ownmodule2.git', :ref => 'production'
自定義模組的配置在測試分支上可能如下所示:
mod 'ownmodule1', :git => 'https://git.example.org/configuration/ownmodule1.git', :ref => 'testing' mod 'ownmodule2', :git => 'https://git.example.org/configuration/ownmodule2.git', :ref => 'testing'
現在,測試中的送出可能如下所示:
+mod 'ownmodule3, + :git => 'https://git.example.org/configuration/ownmodule3.git', + :ref => 'testing'
如果我將其合併到production並且不小心,ownmodule3將與testing分支一起添加到**production中,這可能是致命的。當所有測試都成功時,這也可以防止自動合併。
如何修改我的儲存庫或工作流程以防止意外合併分支特定更改?
從 r10k 2.4.0開始,可以讓 puppet 模組與控制儲存庫中的分支匹配。在分支
testing
上,我的問題中的 Puppetfile 可能如下所示:mod 'ownmodule1', :git => 'https://git.example.org/configuration/ownmodule1.git', :ref => :control_branch
這將導致
testing
模組ownmodule的分支與r10k deploy一起使用。這是相當可靠的。:default_branch
您可以指定一個備份分支。
用替換為目前環境名稱的變數替換用作 refs 的硬編碼環境
Puppetfile
名稱將有助於使您的 Puppetfile 在分支之間可合併。偽程式碼:
mod 'ownmodule1', :git => 'https://git.example.org/configuration/ownmodule1.git', :ref => ${environment}
對於實際程式碼,請參閱此答案,但我不保證它會在您的設置中工作,它有點 hacky。
但是,當然,為了讓您的環境在此更改後正確部署,您必須
production
在模組中創建分支,testing
並使用一些最小的、無操作但為新模組編譯程式碼來初始化它們。PS如果此答案有幫助並且您決定對其進行投票,那麼也請對連結的答案進行投票。