2017-02-27 7 views
0

Ich habe ein Ansible-Playbook, das nach einem nächtlichen Build von den Jenkins aufgerufen wird. Wie Sie sehen können, enthält jede Zeile verschiedene Produktkomponenten. Gibt es eine Möglichkeit, sie parallel zu betreiben? Also werden alle Playbook-Dateien auf server1 seriell ausgeführt, aber Playbooks für server1 und server2 sollten parallel laufen.ansible - Playbooks parallel laufen

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

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

Antwort

0

können Sie Ihr Textbuch Refactoring alle Server auf einmal und strategy: free mit dynamisch integrierten Aufgaben verwenden zielen. Wie folgt aus:

--- 
- 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' 

Auf diese Weise server2 nicht für jede Aufgabe auf server1 warten zu vervollständigen und Vorspulen zu componentC Aufgaben.

Oder Sie können Ihre Jenkins-Pipeline in parallele Aufgaben aufteilen und ansible in separaten Threads für server1 und server2 ausführen.

+0

Ich habe eine Menge von Servern und Komponenten und will es nicht von Jenkins verwalten. Strategie verwenden: freie Option, also muss ich dieses Playbook jedes Mal in einer Schleife ausführen, um einen anderen Servernamen zu übergeben? Es gibt keine andere Möglichkeit, es in einer Playbook-Datei zu verwalten, nur um "include" in Blöcke zu gruppieren und sie parallel auszuführen? –

+0

Ich fürchte nicht. Playbooks sollen in Spiele aufgeteilt werden, wobei jedes Spiel identische Aufgaben auf einer Gruppe von Servern ausführen soll. Stellen Sie beispielsweise zunächst Datenbankserver und dann Anwendungsserver bereit. –

+0

Danke für Ihre schnelle Antwort! Was ist die beste Vorgehensweise, um eine solche Situation zu bewältigen? Wir haben etwa 20 Komponenten, die auf unterschiedliche Weise eingesetzt werden. Also muss ich Playback.yml für jede Komponente behalten. Wie verwaltet man die Installation von allen auf etwa 7 Servern, von denen einige Windows sind und einige Linux? Jetzt halte ich einfach install_all.yml, das eine Liste von Includes enthält, wie ich sie im obigen Beitrag gepostet habe. –

Verwandte Themen