如何在 Google Cloud Build 上加速 java maven 构建(100 个依赖项)

pbi*_*nie 5 java maven google-cloud-build

我正在使用Google Cloud Build构建一个具有数百个依赖项的 java 项目。默认情况下,本地 Maven 存储库缓存将为空,并且每次构建时都会下载所有依赖项

谷歌文档只建议“使用谷歌云存储缓存目录” https://cloud.google.com/cloud-build/docs/speeding-up-builds但同步 7000 个文件需要很长时间(这意味着构建是慢点)

只有一个依赖项是 5 个文件

repository/org/mockito
repository/org/mockito/mockito-core
repository/org/mockito/mockito-core/2.15.0
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.jar
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.jar.sha1
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.pom
repository/org/mockito/mockito-core/2.15.0/mockito-core-2.15.0.pom.sha1
repository/org/mockito/mockito-core/2.15.0/_remote.repositories
Run Code Online (Sandbox Code Playgroud)

示例 cloudbuild.yaml 文件

steps:
- name: gcr.io/cloud-builders/gsutil
  args: ['rsync', '-r', 'gs://my-mavencache-bucket/repository', '.']

- name: 'gcr.io/$PROJECT_ID/mvn'
  args: ['package']
...
Run Code Online (Sandbox Code Playgroud)

我想将 gs://my-mavencache-bucket 作为一个卷挂载 - 但我没有看到这样做的选项

pbi*_*nie 2

经过多次实验,这个解决方案似乎效果很好。谷歌存储旅行车。这个 Maven 插件提供了一种从 google 数据桶读取和发布 Maven 工件的机制

Maven pom.xml 包含

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
...
    <repositories>
        <repository>
            <id>my-repo-bucket-release</id>
            <url>gs://bucket-ave-build-artifact/external</url>
            <releases>
                <enabled>true</enabled>
                <!-- TODO figure out why checksums do not match when artifact pulled from GCP -->
                <checksumPolicy>ignore</checksumPolicy>
            </releases>
        </repository>
    </repositories>

    <distributionManagement>
        <snapshotRepository>
            <id>my-repo-bucket-snapshot</id>
            <url>gs://my-build-artifact-bucket/snapshot</url>
        </snapshotRepository>
        <repository>
            <id>my-repo-bucket-release</id>
            <url>gs://my-build-artifact-bucket/release</url>
        </repository>
    </distributionManagement>
...
        <extensions>
            <extension>
                <groupId>com.gkatzioura.maven.cloud</groupId>
                <artifactId>google-storage-wagon</artifactId>
                <!-- version 1.8 seems to produce exception, ticket logged -->
                <version>1.7</version>
            </extension>
        </extensions>

    </build>
Run Code Online (Sandbox Code Playgroud)

cloudbuild.yaml 很简单

steps:
 - name: 'gcr.io/cloud-builders/mvn'
  # -X here simply for verbose maven debugging
  args: ['deploy', '-X']
Run Code Online (Sandbox Code Playgroud)

这会:

  1. maven 将工件发布到数据桶 gs://my-build-artifact-bucket/release
  2. 从 gs://my-build-artifact-bucket/external 下载外部依赖项(如果它们存在于此目录中)