2016-07-29 8 views
6

Ich versuche, ein Docker bauen für Jenkins anzupassen. Ich befolge unsere docker-compose-Datei und erstelle eine Jenkins-Datei, die jeden Container erstellt und miteinander verknüpft. Das Problem, auf das ich stoße, ist, dass die docker-compose-Dateien einen Kontext deklarieren, in dem sich die Docker-Datei nicht befindet. Soweit ich weiß, wird jenkins den Kontext auf die Position der Docker-Datei setzen, die die zu kopierenden Dateien an einem anderen relativen Speicherort speichert, abhängig davon, ob die jenkins-Datei oder die docker-compose-Datei erstellt wird.Wie setze ich einen benutzerdefinierten Kontext für docker.build in jenkinsfile

Die Ordnerstruktur ist:

workspace 
    |-docker 
     |-db 
      |-Dockerfile 
      |-entrypoint.sh 

Dies ist, wie die Dockerfile den COPY-Befehl für die betreffende Datei

COPY docker/db/entrypoint.sh/

Dies ist, wie mein jenkinsfile erklärt die Datei erstellt. Welche meines Wissens legt den Kontext in diesem Verzeichnis

docker.build("db", "${WORKSPACE}/docker/db") 

die Docker-compose Datei erklärt sie mag:

db: 
build: 
    context: . 
    dockerfile: docker/db/Dockerfile 

, die den Kontext an der Wurzel des Projekts setzt.

Gibt es eine Möglichkeit, einer jenkinsfile mitzuteilen, denselben Kontext wie die docker-compose-Datei zu verwenden, damit die COPY-Anweisung der Dockerfile für Jenkins und docker-compose unverändert bleiben kann? Wenn das nicht möglich ist, kennt jemand alternative Lösungen?

Antwort

11

Es stellt sich heraus, dass ich eine vorherige Version (1.6) des Docker-Pipeline-Plugin gezogen habe. Die fragliche Funktion wurde seit (1.7) aktualisiert, damit der zweite Parameter eine Dockerfile-Position außerhalb des Kontextes angeben kann.

Die aktualisierte Anweisung in meinem Jenkinsfile ist:

return docker.build("db", "-f docker/db/Dockerfile .") 

Und dies ermöglicht es mein Behälter ohne Änderung der erwartete Zusammenhang mit der Entwickler-Docker-compose oder Dockerfiles zu bauen.

+0

Ich bin ich der einzige, der Docker Integration in Jenkins absolut saugt denkt? Ich habe Version 1.14 des Docker-Pipeline-Plugin und es scheint, das zweite Argument wurde bereits wieder entfernt :-( – schneida

+1

@schneida Ich bin 1,13 zu diesem Zeitpunkt ausgeführt, und das Format in dieser Antwort funktioniert immer noch für mich. Sie könnten versuchen Downgrade auf 1.13, um zu sehen, ob es einen Unterschied macht.Andernfalls hat dieses Format auch für mich 'db -f docker/db/Dockerfile' funktioniert, das die Argumente kombiniertund den Kontext weglässt –

0

Nur Omnit der context Artikel auf docker-compose so standardmäßig auf den Speicherort der Dockerfile.

Verwandte Themen