2017-03-21 1 views
0

In der Readme-Datei des fabric8-pipeline-library Projekts gibt es ein Kapitel "Mixing and Matching", das beschreibt, wie mehrere Pod-Vorlagen kombiniert werden können, um einen Pod zu erhalten, der mehrere Gebäudefunktionen kombiniert, wie zum Beispiel die Maven- und Docker-Binärdateien.Mischen und Anpassen von Fabric8 Pod-Vorlagen in Jenkinsfile - Ist das wirklich so?

Aus diesem Dokument:

Es gibt Fälle, in denen wir eine komplexere Setup benötigen, die mehr als eine einzige Vorlage benötigen. (z. B. ein Maven-Container, der Docker-Builds ausführen kann).

Für diesen Fall können Sie die Docker Vorlage und die Maven-Vorlage kombinieren fügen zusammen:

dockerTemplate { 
    mavenTemplate(label: 'maven-and-docker') { 
     node('maven-and-docker') { 
      container(name: 'maven') { 
       sh 'mvn clean package fabric8:build fabric8:push' 
      }    
     } 
    } 
} 

Diese mvn Aufruf offensichtlich Maven brauchen würde, plus lokale Docker Fähigkeiten auf der „Maven“ Container zur Verfügung stehen.

Ich habe ein ziemlich ähnliches Problem mit einem fabric8-fähigen Projekt, muss aber auch die "npm" Binärdatei oben hinzufügen. Die npm-Aufrufe werden auch aus dem Maven-Build via exec-Plugin gemacht, also brauche ich einen Container mit maven + docker + npm.

Während ich mich bemühe, dies zur Arbeit zu bringen, querte ich auch das Dokument der jenkins kubernetes plugin. Es beschreibt auch, wie Pod-Vorlagen verschachtelt/vererbt werden können, aber dort klingt es nicht so, als wäre das Ergebnis tatsächlich ein einzelner Container, der die Fähigkeiten beider Vorlagen kombiniert. Es klingt einfach so, als ob dieser Mechanismus Containerkonfiguration nur über der übergeordneten Vorlage hinzufügen oder ändern könnte. Es kombiniert nicht wirklich Bilder.

Aus diesem Dokument:

A podTemplate kann oder auch nicht aus einer vorhandenen Vorlage erben. Dies bedeutet, dass podTemplate die Knotenauswahl, das Dienstkonto, image pull secrets, containerTemplates und Datenträger von der Vorlage übernimmt, die es erbt.

Containervorlagen, die zum podTemplate hinzugefügt werden, das über ein passendes containerTemplate (ein containerTemplate mit demselben Namen) in der Vorlage 'parent' verfügt, erbt die Konfiguration des übergeordneten containerTemplate. Wenn kein passendes containerTemplate gefunden wird, wird die Vorlage unverändert hinzugefügt.

Dies ist auch die Art, wie ich die Outcoments meiner Kombinationsversuche interpretiere. Die Kombination von docker und maven templates erzeugt keinen einzigen docker + maven Container, sondern zwei Container "docker" und "maven" innerhalb des pods, wo jeder eine Fähigkeit hat. Aber es gibt keinen Container, wo die Fähigkeiten kombiniert werden und ein mvn-Aufruf, der auch docker braucht, sollte funktionieren.

Warum Docker + Maven immer noch funktioniert? Ich denke das maven builder image "fabric8/maven-builder: 2.2.297" hat bereits einen docker out of the box. Ein Terminal in einem Container, der auf diesem Image basiert, kann das Docker-Binary aufrufen, ohne dass daran beteiligte Elternvorlagen beteiligt sind.

Also, ich denke, dass ich eindeutig etwas schrecklich missverstanden habe. Kann jemand dieses Thema beleuchten?

Antwort

0

Ich glaube nicht, dass es technisch möglich ist, nur zwei Docker-Container miteinander zu kombinieren, daher halte ich die Dokumentation für sehr irreführend.