如何从 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 预览此功能)
我正在尝试在云构建过程中进行一些集成测试。到目前为止,我设法连接到 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 预览此功能)