Google Cloud Container Builder mit Cache

737
Vladimir Kishlaly

Sagen wir, ich habe:

steps: - name: 'gcr.io/cloud-builders/gradle' entrypoint: 'bash' args: ['-c', 'chmod +x ./gradlew && ./gradlew build'] - name: 'gcr.io/cloud-builders/docker' args: ['build', '--tag', 'eu.gcr.io/my-app:$_BUILD_ID', '.'] images: ['eu.gcr.io/my-app:$_BUILD_ID'] 

Gibt es Möglichkeiten, den Cache des Gradle für zukünftige Builds zu verlassen? Derzeit werden immer alle Abhängigkeiten heruntergeladen.

Vielleicht muss ich einen Eimer-Speicher bereitstellen und GRADLE_USER_HOME darauf verweisen?

0

2 Antworten auf die Frage

0
Tobi

Verwenden Sie Container Builder, um die Erstellung der Anwendung von der Erstellung der Laufzeitebene zu trennen. Teilen Sie Ihr Bild in einem Container mit den Abhängigkeiten und einem anderen Container mit Ihrer App, wie hier beschrieben . Es verwendet auch die JRE anstelle des JDK zur Laufzeit, wodurch etwas Platz gespart wird

cloudbuild.yaml:

steps: - name: 'java:8' env: ['GRADLE_USER_HOME=cache'] entrypoint: 'bash' args: ['-c', './gradlew gate-web:installDist -x test']  - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA',  '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:latest', '-f', 'Dockerfile.slim', '.' ] images: - 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA' - 'gcr.io/$PROJECT_ID/$REPO_NAME:latest' 

Dockerfile.slim:

FROM openjdk:8u111-jre-alpine  COPY ./gate-web/build/install/gate /opt/gate  CMD ["/opt/gate/bin/gate"] 
0
Alexander Awitin

Das ist was ich für unseren Staging-Build verwende:

cloudbuild.yaml:

steps: # Get the saved global gradle cache from # Google Cloud Storage if it exists. - name: 'gcr.io/cloud-builders/gsutil' entrypoint: 'sh' args: - '-c' - | # Global if gsutil -q stat gs://$_cloudbuild/gradle_global.tar.gz; then cd / gsutil cp gs://$_cloudbuild/gradle_global.tar.gz gradle_global.tar.gz tar -xpzf gradle_global.tar.gz fi volumes: - name: 'gradle_global' path: /root/.gradle  # Build the java package. - name: 'gcr.io/cloud-builders/gradle' entrypoint: 'sh' args: - '-c' - | # Build the gateway .war package. ./gradlew -Pprod -DskipTests clean bootRepackage  # Move the files needed for the docker image # to the slim directory. mv ./build/libs/*.war ./app.war  # Delete all files and folders in the current directory # except for the `app.war` and `Dockerfile`. find . -type d -exec rm -rf {} find . -type f -not -name 'app.war' -not -name 'Dockerfile' -delete volumes: - name: 'gradle_global' path: /root/.gradle  # Save the global gradle cache to Google Cloud Storage - name: 'gcr.io/cloud-builders/gsutil' entrypoint: 'sh' args: - '-c' - | # Global echo 'Creating an archive of /root/.gradle directory' tar -cpzf gradle_global.tar.gz /root/.gradle/ echo 'Saving archive to Cloud Storage' gsutil cp gradle_global.tar.gz gs://$_cloudbuild/gradle_global.tar.gz # Cleaning up echo 'Deleting gradle*.tar.gz' rm -f gradle*.tar.gz volumes: - name: 'gradle_global' path: /root/.gradle  - name: 'gcr.io/cloud-builders/docker' args: ['pull', 'asia.gcr.io/$PROJECT_ID/$:latest']  # Build the gateway container image. - name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'asia.gcr.io/$/$:$' - '-t' - 'asia.gcr.io/$/$:latest' - '--cache-from' - 'asia.gcr.io/$/$:latest' - '.'  images: - asia.gcr.io/$/gateway:$ - asia.gcr.io/$/gateway:latest 

Ich hoffe das hilft.