CloudBuild中Git Builder无法与GitHub认证的问题求助
问题:CloudBuild Git Builder访问私有仓库权限失败
我在微服务单体仓库(Monorepo)项目中使用CloudBuild文件,通过Git builder运行bash脚本识别提交变更的目录,输出结果到文件供后续流水线使用。代码片段如下:
steps: - name: 'gcr.io/cloud-builders/git' entrypoint: /bin/bash args: - -c - | git fetch --depth=2 origin main echo hello git log git --no-pager diff --name-only HEAD^ HEAD | grep "/" | cut -d/ -f1 | sort | uniq > /workspace/diff.txt
在私有仓库运行时,git fetch --depth=2 origin main命令报错:
fatal: could not read Username for 'https://github.com': No such device or address
已确认CloudBuild代理已成功克隆仓库,但Git builder未获得与主CloudBuild代理相同的OAuth令牌,尝试过不同权限的CloudBuilder服务账号仍未解决。
解决方案
1. 直接使用已克隆的仓库内容
CloudBuild启动阶段已经完成了仓库克隆,无需在Git builder步骤中重复执行git fetch,直接操作现有仓库即可:
steps: - name: 'gcr.io/cloud-builders/git' entrypoint: /bin/bash args: - -c - | git --no-pager diff --name-only HEAD^ HEAD | grep "/" | cut -d/ -f1 | sort | uniq > /workspace/diff.txt
2. 传递Git凭据到容器
如果必须执行fetch,可以通过共享卷将CloudBuild的Git凭据传递给Git builder容器:
steps: # 先将CloudBuild的凭据复制到共享卷 - name: 'gcr.io/cloud-builders/git' entrypoint: /bin/bash args: - -c - | cp /builder/home/.git-credentials /root/.git-credentials volumes: - name: 'git-credentials' path: '/root/.git-credentials' # 使用共享卷中的凭据执行fetch和diff - name: 'gcr.io/cloud-builders/git' entrypoint: /bin/bash args: - -c - | git fetch --depth=2 origin main git --no-pager diff --name-only HEAD^ HEAD | grep "/" | cut -d/ -f1 | sort | uniq > /workspace/diff.txt volumes: - name: 'git-credentials' path: '/root/.git-credentials'
3. 利用CloudBuild内置环境变量
CloudBuild提供COMMIT_SHA和PREVIOUS_COMMIT_SHA环境变量,直接用这两个变量进行diff,避免手动处理HEAD:
steps: - name: 'gcr.io/cloud-builders/git' entrypoint: /bin/bash args: - -c - | git --no-pager diff --name-only ${PREVIOUS_COMMIT_SHA} ${COMMIT_SHA} | grep "/" | cut -d/ -f1 | sort | uniq > /workspace/diff.txt
内容的提问来源于stack exchange,提问作者Will Sutton
相关产品推荐
相关产品推荐

