2016-07-29 15 views
6

Próbuję zaadaptować kompilację dockera dla jenkins. Śledzę nasz plik do tworzenia dokerów i tworzę plik Jenkinsa, który tworzy każdy kontener i łączy je ze sobą. Problem, na który napotykam, polega na tym, że pliki kompilacji doków deklarują kontekst, w którym nie ma pliku Docker. O ile mi wiadomo, jenkins ustawi kontekst w miejscu, w którym znajduje się plik Dockerfile, który umieszcza pliki do skopiowania w innej względnej lokalizacji, w zależności od tego, czy budowany jest plik jenkinsfile czy plik dokowanego.Jak ustawić niestandardowy kontekst dla docker.build w jenkinsfile

Struktura folderów jest:

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

ten sposób Dockerfile deklaruje polecenie kopiowania dla danego pliku

COPY docker/db/entrypoint.sh/

ten sposób mój jenkinsfile buduje plik. Które według mojej wiedzy stawia kontekst w tym katalogu

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

plik doker-komponować deklaruje, że lubi:

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

co stawia kontekst u podstaw projektu.

Czy jest jakiś sposób, aby powiedzieć plikowi jenkinsfile, aby używał tego samego kontekstu, co plik do tworzenia dokowanego, aby instrukcja KOPIOWANIA Dockerfile mogła pozostać niezmieniona i była ważna zarówno dla Jenkins, jak i dla Docker-komponować? Jeśli to nie jest możliwe, czy ktoś wie o jakichkolwiek alternatywnych rozwiązaniach?

Odpowiedz

11

Okazuje się, że wyciągnąłem poprzednią wersję (1.6) wtyczki do pipeline-dockingu. Ta funkcja została zaktualizowana (1.7), aby umożliwić drugiemu parametrowi określenie lokalizacji Dockerfile poza kontekstem.

Zaktualizowane oświadczenie w moim Jenkinsfile jest:

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

a to pozwala mój pojemnik budować bez modyfikowania oczekiwany kontekście dewelopera Döcker-Compose lub Dockerfiles.

+0

Jestem jedynym, który myśli, że integracja dokera w Jenkins jest do końca ssa? Mam wersję 1.14 wtyczki potoku docker i wygląda na to, że drugi argument został już usunięty :-( – schneida

+1

@schneida W tym momencie używam wersji 1.13, a format w tej odpowiedzi nadal działa dla mnie. zmienia się na 1.13, aby sprawdzić, czy to robi różnicę, w przeciwnym razie ten format również działał dla mnie 'db -f docker/db/Dockerfile', który łączy argumenty i opuszcza kontekst –

0

Wystarczy Omnit element context na docker-compose, więc domyślnie jest lokalizacja pliku Dockerfile.