如何从 Cloud Build "gradle test" 配置无服务器 VPC 访问?

How to configure Serverless VPC Access from Cloud Build "gradle test"?

我正在尝试在云构建过程中进行一些集成测试。到目前为止,我设法连接到 MySQL 服务器,但我无法连接到 Redis 服务器,因为我无法将 --vpc-connector 选项添加到 gradle test 命令来配置无服务器 VPC 连接器。

这是 cloudbuild.yaml 的一部分:

steps:
  - name: 'gradle:6.8.3-jdk11'
    args:
      - 'test'
      - '--no-daemon'
      - '-i'
      - '--stacktrace'
    id: Test
    entrypoint: gradle
  - name: gcr.io/cloud-builders/docker
    args:
      - build
      - '--no-cache'
      - '-t'
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - .
      - '-f'
      - Dockerfile
    id: Build
  - name: gcr.io/cloud-builders/docker
    args:
      - push
      - '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
    id: Push
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim'
    args:
      - run
      - services
      - update
      - $_SERVICE_NAME
      - '--platform=managed'
      - '--image=$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
      - >-
        --labels=managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID,$_LABELS
      - '--region=$_DEPLOY_REGION'
      - '--quiet'
      - '--vpc-connector=$_SERVERLESS_VPC_CONNECTOR'
    id: Deploy
    entrypoint: gcloud

(... omitted ...)

如果删除 Test 步骤,一切正常。我需要以某种方式将 --vpc-connector 选项添加到 Test 步骤以连接到 Redis 服务器,但是 gradle:6.8.3-jdk11 图像中没有这样的选项。

如何在 Test 步骤中配置无服务器 VPC 连接器,以便 gradle test 命令可以连接到 Redis 服务器?

您正在混合 2 个概念:

  • Gradle是应用层
  • VPC Connector 是一个基础架构组件,用于连接由 Google 管理的无服务器世界和您当前项目的 VPC。

所以,Gradle 绝对不关心基础设施:它会尝试访问私有 IP,REDIS 私有 IP。

Cloud Build 不支持 VPC 连接器,因此您无法通过 Cloud Build 访问项目中的私有资源。 (private preview 正在让 Cloud Build worker 直接在您的 VPC 中,因此不会有这个 VPC 连接问题(因为已经在 VPC 中),但我没有看到 public 预览此功能)