我们制定了一项政策,将资源限制在欧盟地区。
当我尝试执行云构建时,gcloud想要创建一个存储桶(gs:// [PROJECT_ID] _cloudbuild)以存储临时源。此步骤失败,因为使用了默认的存储桶位置(“我们”):
"code": 412,
"message": "'us' violates constraint ‘constraints/gcp.resourceLocations’"
作为一种解决方法,我试图传递位于有效区域中的现有存储桶(使用--gcs-source-staging-dir),但是却遇到了相同的错误。
如何解决?
以下是HTTP日志:
$ gcloud --log-http builds submit --gcs-source-staging-dir gs://my-custom-bucket/staging \
--tag gcr.io/xxxxxxxxxx/quickstart-image .
=======================
==== request start ====
uri: https://www.googleapis.com/storage/v1/b?project=xxxxxxxxxx&alt=json
method: POST
== headers start ==
accept: application/json
content-type: application/json
== headers end ==
== body start ==
{"name": "my-custom-bucket"}
== body end ==
==== request end ====
---- response start ----
-- headers start --
server: UploadServer
status: 412
-- headers end --
-- body start --
{
"error": {
"errors": [
{
"domain": "global",
"reason": "conditionNotMet",
"message": "'us' violates constraint ‘constraints/gcp.resourceLocations’",
"locationType": "header",
"location": "If-Match"
}
],
"code": 412,
"message": "'us' violates constraint ‘constraints/gcp.resourceLocations’"
}
}
-- body end --
---- response end ----
----------------------
ERROR: (gcloud.builds.submit) HTTPError 412: 'us' violates constraint ‘constraints/gcp.resourceLocations’
答案 0 :(得分:2)
我找到了解决此问题的方法。创建项目(启用资源位置限制)后,应在首选位置创建一个名称为[PROJECT_ID]_cloudbuild
的新存储桶。
如果不执行此操作,则云构建提交将在美国自动创建存储桶,这是不可配置的。而且由于资源限制,云构建无法在美国创建此存储桶,并且失败并显示以下错误:
ERROR: (gcloud.builds.submit) HTTPError 412: 'us' violates constraint 'constraints/gcp.resourceLocations'
使用相同名称(手动)创建存储桶时,cloudbuild会将该存储桶作为默认存储桶。该解决方案不是立即可见的,因为对于在应用资源限制时已经具有cloudbuild存储桶的项目,该问题没有出现。
答案 1 :(得分:0)
Cloud Build将使用default bucket to store logs。您可以尝试将logsBucket
字段添加到带有特定存储区的构建配置文件中,如代码段中所示:
steps:
- name: 'gcr.io/cloud-builders/go'
args: ['install', '.']
logsBucket: 'gs://mybucket'
您可以找到有关构建配置文件here
的详细信息答案 2 :(得分:0)
我已通过Google支持部门调查了此问题。他们提出了以下答案:
在与涉及此问题的不同团队进行调查之后, 似乎是影响Cloud Build的限制(在这种情况下, 防止在美国分配资源)。唯一的解决方法 调查得出的结果是创建了一个新项目 没有允许使用Cloud Build的限制。
他们还提到了feature request(@ Christopher P的评论中已经提到-谢谢)
答案 3 :(得分:0)
问题仍然存在(2020年4月):
gcloud builds submit . --config build.yaml --project my-project
ERROR: (gcloud.builds.submit) HTTPError 412: 'us' violates constraint 'constraints/gcp.resourceLocations'
feature request上没有更新。
答案 4 :(得分:0)
我遇到了同样的位置限制问题,请按照以下步骤进行修复
登录 gcp 控制台后,选择您遇到问题的所需项目
然后从 IAM 控制台中选择“组织策略”。确保您拥有将其列出的必要权限
在列表中查找“Google Cloud Platform - Resource Location Restriction”政策。通常它属于自定义策略的类别
请参考这个截图: location constraint
点击策略,点击编辑,在自定义值中向下拖动添加您想要的位置。
使用前缀表示它包含所有提及特定值的内容,使用不带前缀的位置名称
此处“‘我们’违反了约束‘constraints/gcp.resourceLocations”
在自定义值中输入值 us 将其添加并保存,如果它需要 us-east 中的所有区域提及这样的前缀
in:us-east4-locations
希望这有效