Google Cloud Container Builder с кешем

673
Vladimir Kishlaly

Допустим, у меня есть:

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'] 

Есть ли какие-нибудь способы оставить кеш градула для будущих сборок? В настоящее время он продолжает загружать все зависимости каждый раз.

Может быть, мне нужно добавить хранилище и указать GRADLE_USER_HOME?

0

2 ответа на вопрос

0
Tobi

Используйте Container Builder, чтобы отделить сборку приложения от построения его слоя времени выполнения - разделите ваше изображение на контейнер с зависимостями и другой контейнер, содержащий ваше приложение, как описано здесь . Он также использует JRE вместо JDK во время выполнения, экономя дополнительное пространство

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

Вот что я использую для нашей промежуточной сборки:

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 

Надеюсь, это поможет.

Похожие вопросы