首页 > 解决方案 > 如何从 Cloud Build“gradle test”配置无服务器 VPC 访问?

问题描述

我正在尝试在 Cloud Build 过程中进行一些集成测试。到目前为止,我设法连接到 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步骤中配置 Serverless VPC Connector,以便gradle test命令可以连接到 Redis 服务器?

标签: testinggradleredisgoogle-cloud-buildgoogle-vpc

解决方案


您正在混合 2 个概念:

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

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

Cloud Build 不支持 VPC 连接器,因此您无法通过 Cloud Build 访问项目中的私有资源。(正在进行私有预览以使 Cloud Build 工作人员直接在您的 VPC 中,因此不会出现此 VPC 连接问题(因为已经在 VPC 中),但我无法看到此功能的公开预览)


推荐阅读