You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cloud Build部署含私有依赖的Cloud Function时遇权限错误

解决Cloud Build部署Cloud Function拉取GitHub私有仓库权限问题

核心原因

gcloud functions deploy 默认会将源码上传至GCS,随后Cloud Functions的独立构建服务会重新拉取源码并执行npm install——这个过程不会继承Cloud Build步骤中配置的SSH密钥环境,导致拉取私有仓库时权限失败。而你单独执行的npm install/git clone是在Cloud Build的容器环境中完成的,密钥配置生效,因此能成功。

可行解决思路

1. 跳过deploy阶段的重新构建,直接部署已安装好依赖的代码

在Cloud Build中先完成SSH配置、npm install(确保私有依赖安装完成),然后执行deploy时添加--no-build参数,让命令直接使用当前目录下已构建好的代码(包括node_modules):

# cloudbuild.yaml 示例步骤
steps:
  # 1. 从Secret Manager获取SSH密钥并配置
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        gcloud secrets versions access latest --secret=github-ssh-key > /root/.ssh/id_rsa
        chmod 600 /root/.ssh/id_rsa
        ssh-keyscan github.com >> /root/.ssh/known_hosts
  # 2. 安装所有依赖(包括私有仓库)
  - name: 'node:18'
    args: ['npm', 'install']
  # 3. 部署函数,跳过重新构建
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'functions'
      - 'deploy'
      - 'YOUR_FUNCTION_NAME'
      - '--runtime'
      - 'nodejs18'
      - '--trigger-http'
      - '--source'
      - '.'
      - '--no-build'

2. 改用HTTPS+GitHub个人访问令牌(PAT)认证私有依赖

避免SSH环境继承问题,将package.json中的私有依赖URL替换为HTTPS格式,用GitHub PAT做认证:

  • 先在GitHub生成具有repo权限的PAT,存入Secret Manager(命名为github-pat)
  • 在Cloud Build步骤中替换package.json的依赖地址:
steps:
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        PAT=$(gcloud secrets versions access latest --secret=github-pat)
        sed -i "s/git+ssh:\/\/git@github.com\/foo\/my_private_repo.git/git+https:\/\/$PAT@github.com\/foo\/my_private_repo.git/g" package.json
  - name: 'node:18'
    args: ['npm', 'install']
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'functions'
      - 'deploy'
      - 'YOUR_FUNCTION_NAME'
      - '--runtime'
      - 'nodejs18'
      - '--trigger-http'
      - '--source'
      - '.'

3. 验证排查步骤

  • 在Cloud Build的deploy步骤前,添加ls -la node_modules/@foo命令,确认私有依赖已成功安装
  • 检查Cloud Build服务账号是否具有Secret Manager的访问权限
  • 确认--source参数指向的目录包含完整的node_modules和源码文件

内容的提问来源于stack exchange,提问作者ta539tg70

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:40:27