2017-02-27 106 views
0

我有一個在Jenkins每晚構建後調用的ansible playbook。正如你可以看到每行包含不同的產品組件被安裝。 有沒有辦法讓它們並行運行?因此,所有到server1的劇本文件都將以串行方式運行,但適用於server1和server2的劇本應該並行運行。ansible - 平行運行劇本

- include: "componentA.yml target=server1" 
- include: "componentB.yml target=server1" 

- include: "componentC.yml target=server2" 
- include: "componentD.yml target=server2" 

回答

0

您可以重構您的劇本,一次定位所有服務器,並使用動態包含的任務使用strategy: free。像這樣:

--- 
- hosts: server* 
    strategy: free 
    tasks: 
    - include: componentA_tasks.yml 
     when: inventory_hostname == 'server1' 
    - include: componentB_tasks.yml 
     when: inventory_hostname == 'server1' 
    - include: componentC_tasks.yml 
     when: inventory_hostname == 'server2' 
    - include: componentD_tasks.yml 
     when: inventory_hostname == 'server2' 

這樣server2不會等待server1上的每個任務完成,並且會快進到componentC任務。

或者您可以將Jenkins管道拆分爲並行任務並在server1和server2的單獨線程中執行ansible。

+0

我有很多服務器和組件,不想由詹金斯管理它。使用策略:免費選項,所以我將不得不每次運行這個劇本循環以傳遞不同的服務器名稱?在一個劇本文件中沒有其他方法來管理它,只是將塊中的「包含」分組並且並行運行它們? –

+0

恐怕不是。劇本應該被分成劇本,每部劇本應該在一組服務器上完成相同的任務。例如,首先部署數據庫服務器,然後部署應用程序服務器。 –

+0

感謝您的快速響應! 管理這種情況的最佳做法是什麼?我們有大約20個以不同方式部署的組件。所以我必須爲每個組件保留playback.yml。如何管理大約7臺服務器上的所有這些服務器的安裝,其中一些是Windows,一些是Linux?現在,我只保存install_all.yml,其中包含像上面發佈的帖子那樣的包含列表。 –