由于公司限制,我应该在欧洲的GCP上托管所有内容。我工作的组织制定了一项限制政策来执行这一规定。
当我使用gcloud beta run deploy --source . --region europe-west1
从源部署云运行实例时,该命令似乎试图将临时文件存储在us
的存储桶中,这是不允许的。然后,该命令抛出一个412错误。
➜ gcloud beta run deploy cloudrun-service-name --source . --platform managed --region=europe-west1 --allow-unauthenticated
This command is equivalent to running `gcloud builds submit --tag [IMAGE] .` and `gcloud run deploy cloudrun-service-name --image [IMAGE]`
Building using Dockerfile and deploying container to Cloud Run service [cloudrun-service-name] in project [PROJECT_ID] region [europe-west1]
X Building and deploying new service... Uploading sources.
- Uploading sources...
. Building Container...
. Creating Revision...
. Routing traffic...
. Setting IAM Policy...
Deployment failed
ERROR: (gcloud.beta.run.deploy) HTTPError 412: 'us' violates constraint 'constraints/gcp.resourceLocations'
我看到工件注册表存储库是在正确的区域中创建的,但不是在存储桶中创建的。
为了绕过这一点,我必须首先在正确的区域中创建一个名为PROJECT_ID_cloudbuild
的存储桶。有其他办法解决这个问题吗?
查看错误消息表明,无论欧洲的组织政策如何,bucket都必须在美国创建。根据此公共问题跟踪评论,
"云构建提交在美国。当资源受到限制时,这当然不会奏效。作为一种变通方法,你可以在另一个位置。您应该在第一次构建云之前这样做提交。">
这是一个已知的问题,我找到了两个解决方案,可以帮助您实现您想要的目标。
第一个解决方法是使用带有附加标志的"gcloudbuilds-submit":
- 在首选位置
- 使用--gcs源暂存目录和--gcs日志目录2===>该标志是必需的,如同未设置一样它将在美国制造一个水桶
第二个解决方法是使用cloudbuild.yaml和"--gcs-source staging dir"标志:
- 在您可能的区域、双区域或多区域中创建bucket匮乏
- 创建一个cloudbuild.yaml来存储构建工件
- 您可以在以下外部文件中找到YAML文件的示例文件,请注意,我不能保证其准确性因为它不是来自GCP
- 运行命令:
gcloud构建提交--gcs源暂存目录=";gs://example bucket/cloudbuild custom"--config cloudbuild.yaml
请尝试这些解决方案,并告诉我它是否对您有效。