Jenkins部署GCP Cloud Function失败:无法获取源代码
Jenkins流水线部署GCP Cloud Function报错:Failed to retrieve function source code
针对你遇到的ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Failed to retrieve function source code错误,结合你已完成的排查,给出以下针对性验证与修复步骤:
验证Jenkins代理与GCP存储桶的网络连通性
你怀疑VPC防火墙阻断通信的可能性很高,可在Jenkins代理节点上执行以下命令测试:curl -I gs://<你的存储桶完整路径>/<代码包文件名>.zip若返回超时或403错误,说明网络通路存在问题,可通过以下方式解决:
- 配置Jenkins代理所在VPC与GCP项目VPC建立VPC对等连接,打通内网访问通道;
- 给Jenkins代理配置Cloud NAT,使其通过公网合法访问GCP存储服务;
- 临时给存储桶设置公共读取权限(仅限测试,生产环境禁用),快速验证是否为网络问题。
确认Jenkins打包的工作目录与包内容
虽然打包命令本身无误,但Jenkins流水线的工作目录可能与本地/Cloud Shell不同,导致压缩包层级错误。调整流水线中的打包步骤:# 切换到函数代码所在目录 cd ./<函数目录名> # 打包到上级目录,确保包内直接包含入口文件和requirements.txt zip -r ../function-code.zip . # 验证压缩包内容 unzip -l ../function-code.zip确保压缩包根目录下存在你的Python入口文件(如
main.py)和requirements.txt,没有多余的嵌套目录。检查gcloud部署命令的参数细节
确认部署命令中的--source参数指向压缩包的完整GCS路径,而非存储桶目录,例如:gcloud functions deploy <函数名> --runtime python311 --trigger-http --source gs://<存储桶名>/function-code.zip同时在流水线中显式设置GCP项目ID,避免环境变量不一致:
gcloud config set project <你的GCP项目ID>复核服务账号的存储桶权限
确保Jenkins使用的服务账号拥有storage.objects.get权限(读取存储桶文件的核心权限),可直接为其添加Storage Object Viewer预定义角色,或配置更细粒度的IAM权限。
内容的提问来源于stack exchange,提问作者AndrewJaeyoung
相关产品推荐
相关产品推荐

