我正试图通过GitLab CI/CD实现从GitLab中的存储库到Google cloud功能的云功能部署。我得到标题和下面的错误。
错误:(gcloud.functions.deploy(响应错误:状态=[403],代码=[禁止],消息=[Permission'cloudfunctions.functions.get'在资源项目上被拒绝/ahinko网站prd/locations/us-central1/functions/send_contact'(或资源可能不存在(。]
我的.gitlab-CI.yml文件是:
image: google/cloud-sdk:slim
stages:
- release
- function_deploy
before_script:
- gcloud auth activate-service-account --key-file $GOOGLE_SERVICE_ACCOUNT_FILE
- gcloud config set project $GOOGLE_PROJECT_ID
release:
stage: release
script:
- gsutil -m rm gs://ahinko.com/**
- gsutil -m cp -R src/client-side/* gs://ahinko.com
environment:
name: production
url: https://ahinko.com
only:
- master
function_deploy:
stage: function_deploy
script:
- gcloud functions deploy send_contact --entry-point=send_contact_form --ingress-settings=all --runtime=python37 --trigger-http
environment:
name: production
url: https://ahinko.com
only:
- ci-test
这似乎是gitlab服务帐户中缺少权限。您必须授予适当的角色才能部署云功能。
您可以将角色cloudfunctions.developer
授予服务帐户
可以创建、更新和删除函数。无法设置云IAM策略,但可以查看源代码。需要额外的配置才能部署功能。
Additional configuration:
要为用户分配云功能管理员(
roles/cloudfunctions.admin
(或云功能开发人员角色(roles/cloudfunctions.developer
(或可以部署功能的自定义角色,还必须在云功能运行时服务帐户上为用户分配服务帐户用户云IAM角色(roles/iam.serviceAccountUser
(。
gcloud iam service-accounts add-iam-policy-binding
PROJECT_ID@appspot.gserviceaccount.com
--member MEMBER
--role roles/iam.serviceAccountUser