传递项目 ID 时 cloudbuild.yaml 文件中的正则表达式错误
Posted
技术标签:
【中文标题】传递项目 ID 时 cloudbuild.yaml 文件中的正则表达式错误【英文标题】:Regex error in cloudbuild.yaml file while passing project-id 【发布时间】:2021-09-10 05:29:21 【问题描述】:我正在尝试使用云构建运行数据流作业
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args:
dataflow
jobs
run
google-template-job
--gcs-location=gs://dataflow-templates/latest/PubSub_Subscription_to_BigQuery
--parameters=inputSubscription='projects/$PROJECT_ID/subscriptions/messages'
--parameters=outputTableSpec="$PROJECT_ID:beam_samples.streaming_beam"
--staging-location=gs://cloudbuild-dataflow-testproject123456789-313307/tmp'
--region=us-central1
每次触发构建时都会出现以下错误
ERROR: (gcloud.dataflow.jobs.run) INVALID_ARGUMENT: The template parameters are invalid.
- '@type': type.googleapis.com/google.dataflow.v1beta3.InvalidTemplateParameters
parameterViolations:
- description: 'Unmatched regex: ^projects\/[^\n\r\/]+\/subscriptions\/[^\n\r\/]+$'
parameter: inputSubscription
ERROR
ERROR: build step 0 "gcr.io/cloud-builders/gcloud" failed: step exited with non-zero status: 1
我的项目 ID 中有一个“-”,所以如果我将 $PROJECT_ID 替换为项目 ID 的值,我仍然会遇到同样的错误,是否有任何解决方法。我无法控制停止正则表达式检查,因为它是谷歌提供的模板。
我该如何克服这个问题
【问题讨论】:
您确定您的项目 ID 吗?你没有和项目名称混在一起吗?你能分享你的项目ID,文本的虚拟值吗? 我也尝试了项目名称,仍然是同样的问题。我的项目 id 是 testproject123456789-313307 【参考方案1】:知道了。这只是一个命令解释器问题。如果你放单引号,你会阻止对内部字符串的任何评估。
在你的情况下
--parameters=inputSubscription='projects/$PROJECT_ID/subscriptions/messages'
'projects/$PROJECT_ID/subscriptions/messages'
的值被视为原样,因此项目 ID 包含大写和下划线,这违反了正则表达式模式。
更改为双引号,它应该很好用!
--parameters=inputSubscription="projects/$PROJECT_ID/subscriptions/messages"
【讨论】:
我也试过了,但我仍然收到同样的错误。我真的不确定我在这里做错了什么,因为 gcloud 命令在 sdk 中运行良好,但 inputSubscription 的每次迭代都会引发相同的错误以上是关于传递项目 ID 时 cloudbuild.yaml 文件中的正则表达式错误的主要内容,如果未能解决你的问题,请参考以下文章
cloudbuild.yaml 上的错误:(gcloud.builds.submit)将 cloudbuild.yaml 解释为构建配置:“列表”对象没有属性“项目”
如何在 cloudbuild.yaml 中使用 Kaniko?