使用多个git存储库构建Google Cloud



我有一个带git子模块的git存储库,该存储库链接到另一个git存储池。

main-repo
-> file1.txt
-> submodule-repo
-> file2.txt

我创建了一个具有main-repo权限的Google Cloud Build触发器。

为了加载submodule-repo存储库,我在构建指令中添加了以下命令:

steps:
- name: gcr.io/cloud-builders/git
args: ['submodule', 'update', '--init', '--recursive']
...

它在这个阶段失败了。为什么?权限问题:

为路径"***"注册的子模块"XXX"(XXX(克隆到'/workspace/XX'。。。ssh:无法解析主机名c:Name或服务未知致命错误:无法从远程存储库中读取。

请确保您拥有正确的访问权限和存储库存在。

我给Google的读取权限是针对main-repogit存储库的。由于我只能授予一个存储库的访问权限,因此无法授予submodule-repo代表的另一个权限。

如何使用Google Cloud Build构建带有git子模块的git存储库?

我做了以下工作,它对我很有效:我按照以下说明从谷歌云访问我的私人回购:

  1. 创建SSH密钥
  2. 将专用SSH密钥存储在Secret Manager中
  3. 将公共SSH密钥添加到您的私有存储库的部署密钥中(如果您需要访问多个repo,请创建一个用户或使用有权访问这些repo的现有用户,并将部署密钥放入此帐户,而不是存储库本身>来自GitHub帐户>设置>SSH密钥(
  4. 授予Cloud Build服务帐户访问Secret Manager的权限
  5. 将公共SSH密钥添加到已知主机(我在云构建中将公钥作为变量存储,您可以使用GitHub secret来存储它(

*使用此命令获取公钥,不要从.pub文件中复制

ssh-keyscan -t rsa github.com > known_hosts.github

然后在云构建文件中执行以下步骤:

- name: 'gcr.io/cloud-builders/git'
secretEnv: ['SSH_KEY']
entrypoint: 'bash'
args:
- -c
- |
echo "$$SSH_KEY" >> /root/.ssh/id_rsa
chmod 400 /root/.ssh/id_rsa
echo ${_SSH_PUBLIC_KEY} >> /root/.ssh/known_hosts
volumes:
- name: 'ssh'
path: /root/.ssh
- name: 'gcr.io/cloud-builders/git'
entrypoint: 'bash'
args:
- '-c'
- |
git submodule init
git submodule update
volumes:
- name: 'ssh'
path: /root/.ssh
availableSecrets:
secretManager:
- versionName: projects/[GCP_Project]/secrets/[SECRET_NAME]/versions/latest
env: 'SSH_KEY'

最新更新