【问题标题】:Error while running pipeline from bitbucket to GCP运行从 bitbucket 到 GCP 的管道时出错
【发布时间】:2021-09-18 03:12:13
【问题描述】:

我正在尝试运行从 bitbucket 到 GCP 的管道。这是我的管道配置:

image: node:10.15.3

pipelines:
  default:
    - parallel:
        - step:
            name: Build and Test
            caches:
              - node
            script:
              - npm install
        - step:
            name: Deploy
            deployment: staging
            script:
            - curl -o /tmp/google-cloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-347.0.0-linux-x86_64.tar.gz
            - tar -xvf /tmp/google-cloud-sdk.tar.gz -C /tmp/
            - /tmp/google-cloud-sdk/install.sh -q
            - source /tmp/google-cloud-sdk/path.bash.inc
            - gcloud -v
            - echo "${KEY_FILE}" | base64 --decode --ignore-garbage > ./gcloud-api-key.json
            - gcloud auth activate-service-account --key-file gcloud-api-key.json
            - echo "$(gcloud auth list)"
            - gcloud config unset project
            - gcloud config set project $PROJECT_ID
            - echo "GCLOUD" "$(gcloud iam service-accounts list)"
            - echo "$(gcloud projects list)"
            #- gcloud auth login
            - gcloud app deploy  # getting error here

在 GCP 仪表板上,我从顶部下拉列表中选择了我的项目并创建了服务帐户。我的服务帐户拥有以下权限:

我已下载服务帐户 json 并在使用 base64 编码后将环境变量 KEY_FILE 添加到 bitbucket(执行 base64 <service-account>.json 并将输出粘贴到变量中)。 PROJECT_ID 变量包含来自 GCP 的项目 ID。

为管道命令添加输出:

gcloud auth activate-service-account --key-file gcloud-api-key.json

已激活服务帐户凭据: [service-account-name@project-id.iam.gserviceaccount.com]

echo "$(gcloud auth list)"

要设置活动帐户,请运行: $ gcloud 配置设置账号ACCOUNT

活动帐户

  •    service-account-name@project-id.iam.gserviceaccount.com
    

gcloud config unset project

取消设置属性 [核心/项目]。

gcloud config set project $PROJECT_ID

更新了属性 [核心/项目]。 警告:您似乎无权访问项目 [PROJECT_ID] 或它不存在。

echo "$(gcloud projects list)"

列出 0 项。

gcloud app deploy

错误:(gcloud.app.deploy) 获取应用程序的权限错误

经过数小时的研究,我无法解决问题。任何输入都会有所帮助。

【问题讨论】:

  • 您是否 100% 都在使用project ID and not the project name
  • @danyL 是的,项目名称是 Bitbucket-Test,id 是 所以我很确定这不是问题。已经检查了那个线程。我尝试用项目名称设置gcloud config set project $PROJECT_ID,但收到一个错误提示不是有效的项目ID,所以我认为这里不是这种情况。

标签: google-cloud-platform bitbucket gcloud bitbucket-pipelines


【解决方案1】:

您应该能够从 任何 机器上运行脚本,这将有助于调试;在本地(可能在“干净”容器中)运行它以发现错误。

您包含的输出引用 service-account-name@project-id.iam.gserviceaccount.comiam.gserviceaccount.com 建议用户创建的服务帐户。

但是,您在屏幕截图中引用的帐户是 App Engine 默认服务帐户appspot.gserviceaccount.com

您可能已为其创建了服务帐户和密钥,但未为其分配任何权限。这将解释错误。

服务帐户归特定项目所有,您可以使用以下命令列出特定项目中的服务帐户:

PROJECT=[[YOUR-PROJECT-ID]]

gcloud iam service-accounts list \
--project=${PROJECT}

您可以使用以下方式列出项目的权限:

gcloud projects get-iam-policy ${PROJECT}

注意在帐户需要权限的每个项目或项目资源上,服务帐户必须是role'd。

注意要列出项目,帐户需要 IAM 权限 resourcemanager.projects.list。这必须在组织或文件夹 link

上启用

【讨论】:

  • 很好的意见,让我检查一下并返回我的研究。
  • 这真的很有帮助,但我有一个疑问。我现在使用默认服务帐户,当我运行此命令时:gcloud config set project $PROJECT_ID,我得到WARNING: You do not appear to have access to project <project-name> or it does not exist.。运行 CI/CD 管道需要哪些权限?
  • 服务帐户令人困惑。它们在几个方面不同于常规(用户|人类)帐户。一种方法是它们归特定项目所有。要在其他项目中使用,您需要将服务帐户(使用其电子邮件地址)添加到特定项目、特定项目的资源或组织|文件夹,以便能够访问这些资源。这可能就是这里发生的事情。您的默认服务帐户在项目 X 中,您正尝试使用它访问项目 Y。
  • 感谢您的帮助,如果没有您的宝贵意见,将无法解决此问题。虽然我在部署时遇到了另一个问题,但这是我们需要的突破 :)
  • 谢谢!我很高兴它有帮助。不客气!
【解决方案2】:

正如@DazWilkin 所说,在服务帐户处于活动状态时尝试激活项目 (gcloud config set project $PROJECT_ID) 时会出现问题,因为服务帐户仅对已添加它的项目具有权限。您可以在激活服务帐户后(即在gcloud auth activate-service-account --key-file gcloud-api-key.json 之后)使用命令gcloud projects list 进行检查,该命令会显示活动帐户可访问的所有项目的列表。如果您想使用其他项目的服务帐户,则必须将其添加到每个项目中(请查看post)。

【讨论】:

    猜你喜欢
    • 2022-08-16
    • 2017-11-28
    • 2020-07-31
    • 1970-01-01
    • 2020-06-16
    • 2021-04-26
    • 2021-09-06
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多