Puppet

r10k:與 git 的正確合併工作流程

  • September 26, 2016

我目前正在以無主模式執行 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如果此答案有幫助並且您決定對其進行投票,那麼也請對連結的答案進行投票。

引用自:https://serverfault.com/questions/788431