testing - 如何从 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 服务器?
解决方案
您正在混合 2 个概念:
- Gradle 是一个应用层
- VPC 连接器是一个基础设施组件,用于连接由 Google 管理的无服务器世界和您当前项目的 VPC。
所以,Gradle 绝对不关心基础设施:它会尝试访问私有 IP,即 REDIS 私有 IP。
Cloud Build 不支持 VPC 连接器,因此您无法通过 Cloud Build 访问项目中的私有资源。(正在进行私有预览以使 Cloud Build 工作人员直接在您的 VPC 中,因此不会出现此 VPC 连接问题(因为已经在 VPC 中),但我无法看到此功能的公开预览)
推荐阅读
- java - 连接两个表时的休眠异常
- mono.cecil - 为什么 PublicKeyToken 改变了?
- ruby - 当我尝试在 Bash 中运行 pry 时出现错误
- swift - 精灵套件。如何改变后台速度?
- javascript - React.js 从保存的 api 响应中显示图像
- django - cursor.fetchall() 的结果类型是元组列表,但 doc 显示元组的元组
- python - 无法从 Python 3 播放声音
- python - python网格数据绘图范围设置不起作用imshow
- c - OpenSSL:内存中的证书未正确验证
- chart.js - ChartJs - 图表区域和标签区域的宽度比例