View a markdown version of this page

Amazon S3-Caching - AWS CodeBuild

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon S3-Caching

Amazon S3-Caching speichert den Cache in einem Amazon S3-Bucket, der auf mehreren Build-Hosts verfügbar ist. Dies ist eine gute Option für kleine bis mittelgroße Build-Artefakte, deren Erstellung teurer ist als das Herunterladen.

Um Amazon S3 in einem Build zu verwenden, können Sie die Pfade für die Dateien angeben, die Sie zwischenspeichern möchtenbuildspec.yml. CodeBuild speichert und aktualisiert den Cache automatisch an dem im Projekt konfigurierten Amazon S3-Speicherort. Wenn Sie die Dateipfade nicht angeben, CodeBuild werden gängige Sprachabhängigkeiten nach besten Kräften zwischengespeichert, um die Builds zu beschleunigen. Sie können die Cache-Details in den Build-Protokollen einsehen.

Wenn Sie mehrere Versionen des Caches haben möchten, können Sie außerdem einen Cache-Schlüssel in der definierenbuildspec.yml. CodeBuild speichert den Cache im Kontext dieses Cache-Schlüssels und erstellt eine eindeutige Cache-Kopie, die nach der Erstellung nicht mehr aktualisiert wird. Die Cache-Schlüssel können auch projektübergreifend gemeinsam genutzt werden. Funktionen wie dynamische Schlüssel, Cache-Versionierung und gemeinsame Nutzung des Caches zwischen Builds sind nur verfügbar, wenn ein Schlüssel angegeben wird.

Weitere Informationen zur Cache-Syntax in der Buildspec-Datei finden Sie Cache in der Buildspec-Referenz.

Generieren Sie dynamische Schlüssel

Ein Cache-Schlüssel kann Shell-Befehle und Umgebungsvariablen enthalten, um ihn eindeutig zu machen und automatische Cache-Aktualisierungen zu ermöglichen, wenn sich der Schlüssel ändert. Beispielsweise können Sie einen Schlüssel mithilfe des Hashs der package-lock.json Datei definieren. Wenn sich die Abhängigkeiten in dieser Datei ändern, ändert sich der Hash — und damit der Cache-Schlüssel — und löst die automatische Erstellung eines neuen Caches aus.

cache: key: npm-key-$(codebuild-hash-files package-lock.json)

CodeBuild wertet den Ausdruck aus, um den endgültigen Schlüssel $(codebuild-hash-files package-lock.json) zu erhalten:

npm-key-abc123

Sie können einen Cache-Schlüssel auch mithilfe von Umgebungsvariablen definieren, z. CODEBUILD_RESOLVED_SOURCE_VERSION B. Dadurch wird sichergestellt, dass bei jeder Änderung Ihrer Quelle ein neuer Schlüssel generiert wird, was dazu führt, dass automatisch ein neuer Cache gespeichert wird:

cache: key: npm-key-$CODEBUILD_RESOLVED_SOURCE_VERSION

CodeBuild wertet den Ausdruck aus und erhält den endgültigen Schlüssel:

npm-key-046e8b67481d53bdc86c3f6affdd5d1afae6d369

Codebuild-Hash-Dateien

codebuild-hash-filesist ein CLI-Tool, das mithilfe von Glob-Mustern einen SHA-256 Hash für eine Reihe von Dateien im CodeBuild Quellverzeichnis berechnet:

codebuild-hash-files <glob-pattern-1> <glob-pattern-2> ...

Hier sind einige Beispiele, die Folgendes verwenden: codebuild-hash-files

codebuild-hash-files package-lock.json codebuild-hash-files '**/*.md'

Cache-Version

Die Cache-Version ist ein Hash, der aus den Pfaden der zwischengespeicherten Verzeichnisse generiert wird. Wenn zwei Caches unterschiedliche Versionen haben, werden sie beim Abgleich als unterschiedliche Caches behandelt. Beispielsweise werden die folgenden beiden Caches als unterschiedlich betrachtet, da sie auf unterschiedliche Pfade verweisen:

version: 0.2 phases: build: commands: - pip install pandas==2.2.3 --target pip-dependencies cache: key: pip-dependencies paths: - "pip-dependencies/**/*"
version: 0.2 phases: build: commands: - pip install pandas==2.2.3 --target tmp/pip-dependencies cache: key: pip-dependencies paths: - "tmp/pip-dependencies/**/*"

Gemeinsame Nutzung des Caches zwischen Projekten

Sie können das cacheNamespace API-Feld unter dem cache Abschnitt verwenden, um einen Cache für mehrere Projekte gemeinsam zu nutzen. Dieses Feld definiert den Umfang des Caches. Um einen Cache gemeinsam zu nutzen, müssen Sie Folgendes tun:

  • Benutze dasselbecacheNamespace.

  • Geben Sie denselben Cache ankey.

  • Definieren Sie identische Cache-Pfade.

  • Verwenden Sie dieselben Amazon S3-Buckets und pathPrefix falls gesetzt.

Dies gewährleistet Konsistenz und ermöglicht die gemeinsame Nutzung des Caches zwischen Projekten.

Geben Sie einen Cache-Namespace an (Konsole)

  1. Öffnen Sie die AWS CodeBuild Konsole unter. https://console.aws.amazon.com/codesuite/codebuild/home

  2. Wählen Sie Create project (Projekt erstellen) aus. Weitere Informationen finden Sie unter Erstellen Sie ein Build-Projekt (Konsole) und Ausführen eines Build (Konsole).

  3. Wählen Sie unter Artifacts die Option Zusätzliche Konfiguration aus.

  4. Wählen Sie als Cache-Typ Amazon S3 aus.

  5. Geben Sie für Cache-Namespace — optional einen Namespace-Wert ein.

    Cache-Namespace-Parameter in der Konsole. CodeBuild
  6. Fahren Sie mit den Standardwerten fort und wählen Sie dann Create build project.

Geben Sie einen Cache-Namespace an (AWS CLI)

Sie können den --cache Parameter in der verwenden AWS CLI , um einen Cache-Namespace anzugeben.

--cache '{"type": "S3", "location": "your-s3-bucket", "cacheNamespace": "test-cache-namespace"}'

Buildspec-Beispiele

Hier sind einige Buildspec-Beispiele für gängige Sprachen:

Abhängigkeiten zwischenspeichern Node.js

Wenn Ihr Projekt eine package-lock.json Datei enthält und npm zur Verwaltung von Node.js Abhängigkeiten verwendet wird, zeigt das folgende Beispiel, wie das Caching eingerichtet wird. npmInstalliert standardmäßig Abhängigkeiten in das node_modules Verzeichnis.

version: 0.2 phases: build: commands: - npm install cache: key: npm-$(codebuild-hash-files package-lock.json) paths: - "node_modules/**/*"

Python-Abhängigkeiten zwischenspeichern

Wenn Ihr Projekt eine requirements.txt Datei enthält und pip zur Verwaltung von Python-Abhängigkeiten verwendet, zeigt das folgende Beispiel, wie das Caching konfiguriert wird. Standardmäßig installiert pip Pakete im Systemverzeichnis. site-packages

version: 0.2 phases: build: commands: - pip install -r requirements.txt cache: key: python-$(codebuild-hash-files requirements.txt) paths: - "/root/.pyenv/versions/${python_version}/lib/python${python_major_version}/site-packages/**/*"

Darüber hinaus können Sie Abhängigkeiten in einem bestimmten Verzeichnis installieren und das Caching für dieses Verzeichnis konfigurieren.

version: 0.2 phases: build: commands: - pip install -r requirements.txt --target python-dependencies cache: key: python-$(codebuild-hash-files requirements.txt) paths: - "python-dependencies/**/*"

Ruby-Abhängigkeiten zwischenspeichern

Wenn Ihr Projekt eine Gemfile.lock Datei enthält und Bundler zur Verwaltung von Gem-Abhängigkeiten verwendet wird, zeigt das folgende Beispiel, wie Sie das Caching effektiv konfigurieren.

version: 0.2 phases: build: commands: - bundle install --path vendor/bundle cache: key: ruby-$(codebuild-hash-files Gemfile.lock) paths: - "vendor/bundle/**/*"

Cache Go-Abhängigkeiten

Wenn Ihr Projekt eine go.sum Datei enthält und Go-Module zur Verwaltung von Abhängigkeiten verwendet, zeigt das folgende Beispiel, wie das Caching konfiguriert wird. Standardmäßig werden Go-Module heruntergeladen und im ${GOPATH}/pkg/mod Verzeichnis gespeichert.

version: 0.2 phases: build: commands: - go mod download cache: key: go-$(codebuild-hash-files go.sum) paths: - "/go/pkg/mod/**/*"