Cloud Build因资源位置限制而失败

时间:2018-11-08 11:17:22

标签: google-cloud-platform

我们制定了一项政策,将资源限制在欧盟地区。

当我尝试执行云构建时,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’

5 个答案:

答案 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)

我遇到了同样的位置限制问题,请按照以下步骤进行修复

  1. 登录 gcp 控制台后,选择您遇到问题的所需项目

  2. 然后从 IAM 控制台中选择“组织策略”。确保您拥有将其列出的必要权限

  3. 在列表中查找“Google Cloud Platform - Resource Location Restriction”政策。通常它属于自定义策略的类别

    请参考这个截图: location constraint

  4. 点击策略,点击编辑,在自定义值中向下拖动添加您想要的位置。

    使用前缀表示它包含所有提及特定值的内容,使用不带前缀的位置名称

    此处“‘我们’违反了约束‘constraints/gcp.resourceLocations”

  5. 在自定义值中输入值 us 将其添加并保存,如果它需要 us-east 中的所有区域提及这样的前缀

    in:us-east4-locations
    

希望这有效

allowed values