2016-06-29 3 views
1

Ich würde gerne wissen, ob es irgendwie möglich wäre, Datei/Ordner von innen Docker zum Host zu kopieren, aber das Kopieren von selbst ist Formular innerhalb Docker ausgeführt.Kopieren von Docker zu Host innerhalb CI Build

Der Grund dafür ist, dass zum Beispiel:

  • Commit Datei
  • CI Tritte in
  • Docker installiert Abhängigkeiten Repo, baut die Website-Dateien
  • Webseite Dateien von Docker kopiert wird/var/www/my-Webseite (Host)

Als ich nach einer Lösung gesucht habe ich diesen Befehl gesehen viel docker cp <containerId>:/file/path/within/container /host/path/target jedoch wird dies von HOST ausgeführt. Ich möchte den gesamten Prozess automatisieren.

Mögliche Lösung ist natürlich, nicht Docker, sondern gerade SSH, das ist, was ich jetzt mache, aber das ist nicht die beste Option IMO.

Hier ist ein Beispiel meiner .gitlab-ci.yml Datei, die erklären wird, was ich erreichen möchte.

image: ubuntu:16.04 

build: 
    stage: build 
    script: 
     - apt-get update 
     - apt-get upgrade -yy 
     - apt-get install hugo -yy # Static site generator 
     - hugo build # Build the website 
     - cp -R ./build/* /var/www/my-website/ # Copy to the web root 

Hier ist mein Läufer Konfiguration

[[runners]] 
    name = "DOCKER-TEST" 
    url = "https://gitlab.com/ci" 
    token = "{{token}}" 
    executor = "docker" 
    [runners.docker] 
    tls_verify = false 
    image = "ubuntu:16.04" 
    privileged = true 
    disable_cache = false 
    volumes = ["/cache", "/home/stan:/builds/stanislavromanov/test-docker:rw"] 
    [runners.cache] 
    Insecure = false 

Antwort

2

sollten Sie in der Lage sein, eine Docker einstellen volume wo ein Verzeichnis im Container an ein Verzeichnis des Hosts angehängt ist.

Im Fall von GitLab CI-Laufwerken kann dies während der Läuferregistrierung oder später durch Änderung von /etc/gitlab-runner/config.toml festgelegt werden. Beispiel:

[[runners]] 
    url = "https://gitlab.com/ci" 
    token = TOKEN 
    executor = "docker" 
    [runners.docker] 
    tls_verify = false 
    image = "ubuntu:16.04" 
    privileged = true 
    disable_cache = false 
    volumes = ["/path/to/bind/from/host:/path/to/bind/in/container:rw"] 

Siehe documentation für weitere Informationen.

+0

Hey, ich habe versucht, dieses eine 'volumes = ["/cache ","/builds/stanislavromanov/test-docker:/home/stan: rw "]' und hat keine Datei in meinem Haus erstellt Richt. Habe auch versucht, die Datei direkt zu kopieren, so wie 'cp myCoolFile/usr/stan/myCoolFile'. Mache ich etwas falsch? Hier ist das Repo https://gitlab.com/stanislavromanov/test-docker/ – sed

+0

Die Volume-Definition soll * Host_path: container_path * sein, während es mir scheint, dass Sie das Gegenteil eingerichtet haben. – tmt

+0

Hey, ich habe meine Konfiguration zu der Antwort hinzugefügt, sieht es für Sie richtig aus? – sed

2

Kopieren von einem Behälter zum Host ist nicht möglich, mit so etwas wie docker cp. Was Sie jedoch tun, ist das Host-Verzeichnis in den Behälter, zum Beispiel zu montieren:

$ docker run ... -v /var/www/my-website:/website-on-host ... 

und passen Sie Ihre cp Befehl in .gitlab-ci.yml wie folgt:

cp -R ./build/* /website-on-host/ # Copy to the web root 
Verwandte Themen