web-dev-qa-db-de.com

Aktivieren/Einrichten von Abhängigkeits-Caches für apt-get in BitBucket-Pipelines

Ich verwende den folgenden Code in meinen bitbucket-pipelines.yml-Dateien, um Code auf einem Staging-Server remote bereitzustellen.

image: php:7.1.1

pipelines:
  default:
    - step:
        script:
          # install ssh
          - apt-get update && apt-get install -y openssh-client
          # get the latest code
          - ssh [email protected] -F ~/.ssh/config "cd /path/to/code && git pull"
          # update composer
          - ssh [email protected] -F ~/.ssh/config "cd /path/to/code && composer update --no-scripts"
          # optimise files
          - ssh [email protected] -F ~/.ssh/config "cd /path/to/code && php artisan optimize"

Dies alles funktioniert, mit der Ausnahme, dass jedes Mal, wenn die Pipeline ausgeführt wird, der ssh-Client heruntergeladen und installiert wird (was der Erstellungszeit ~ 30 Sekunden hinzufügt). Gibt es eine Möglichkeit, diesen Schritt zwischenzuspeichern?

Und wie kann ich den Schritt apt-get zwischenspeichern?

Würde zum Beispiel so etwas funktionieren (oder welche Änderungen sind erforderlich, um die folgende Arbeit zu machen):

pipelines:
  default:
    - step:
        caches:
          - aptget
        script:
          - apt-get update && apt-get install -y openssh-client

definitions:
  caches:
    aptget: which ssh
11
Niraj Shah

Dies ist ein typisches Szenario, in dem Sie anstelle eines von Atlassian bereitgestellten Docker-Images Ihr eigenes Docker-Image verwenden sollten. (Oder suchen Sie nach einem Docker-Image, das genau dies bietet.)

In Ihrem einfachen Fall sollte dieses Dockerfile ausreichen:

FROM php:7.1.1

RUN apt-get update && \
    apt-get install -y openssh-client

Erstellen Sie dann ein DockerHub-Konto, veröffentlichen Sie das Bild und referenzieren Sie es in bitbucket-pipelines.yml.

16
BlueM

Leider sind die Teile, die die Zeit in Anspruch nehmen, unsicher oder sinnlos zu zwischenspeichern. Denken Sie daran, dass die Pipeline-Caches jederzeit gelöscht werden können, sodass Sie die Befehle immer ausführen müssen.

apt-get update verwendet keinen Cache und lädt daher jedes Mal die neuesten Indizes herunter.

apt-get install speichert heruntergeladene Pakete in /var/cache/apt, sodass Sie diese speichern können. Dies wird jedoch wahrscheinlich keine Zeit sparen

907 kB in 0s (998 kB/s) abgerufen

Die tatsächlich installierten Pakete können nicht zwischengespeichert werden, da sie a) auf mehrere gemeinsam genutzte Dateien und Verzeichnisse verteilt sind und b) möglicherweise nicht auf verschiedene Docker-Images portiert werden können.

Auf einer tieferen Ebene ist eine zufriedenstellende Interaktion zwischen Caching, apt-get update und Docker ein komplexes Problem .

1
OrangeDog