如何从另一个项目访问GCP云源存储库?

时间:2019-11-18 15:44:35

标签: google-cloud-platform google-cloud-build google-cloud-repository

我有项目A和项目B。

我将项目A上的GCP云源存储库用作我的“原始”遥控器。

我将Cloud Build与触发器一起使用,以对存储库的“ develop”分支进行更改以触发构建。作为构建的一部分,我使用gcloud构建器部署了一些东西到项目A。

现在,我想在项目B上运行相同的构建。也许是相同的分支,也许是不同的分支(即'release- *')。最后,要使用gcloud生成器将一些东西部署到项目B。

问题是,当我在项目B中(在Google Cloud Console中)时,我什至看不到项目A中的存储库。它要求我“连接存储库”,但是我只能选择GitHub或Bitbucket用于镜像的存储库。选项“ Cloud Source Repositories”显示为灰色,告诉我它们“已连接”。显然不是来自另一个项目的人。

我可以在项目B上建立一个新的回购协议,并同时推动这两个回购协议,但这似乎效率不高(并且可能长期无法持续)。奇怪的是,使用外部Bitbucket / GitHub存储库作为来源并在两个项目中均进行镜像,可以轻松实现这种设置。

在没有外部依赖项的情况下,在Google Cloud Platform中是否完全有可能做到这一点?

我还尝试在项目A中运行所有构建,并有一个单独的触发器部署到项目B(我使用替代方法来管理它),但是由于权限问题而失败。 Cloud Build似乎总是与Cloud Build服务帐户一起运行,您可以使用该帐户来管理角色,但是我看不到如何赋予它访问另一个项目的权限。同样,在这种情况下,两个构建在单个构建历史中都无法区分,这并不理想。

4 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,并通过使用多个Cloud Build文件解决了该问题。

一个Cloud Build文件(在将代码推送到某个分支时触发)专门用于将我的所有源代码复制到新的项目源存储库中,该文件还拥有自己的Cloud Build文件以用于部署到该文件项目。

以下是Cloud Build文件的示例,该文件将源复制到另一个项目:


steps:
  - name: gcr.io/cloud-builders/git
    args: ['checkout', '--orphan', 'temp']
  - name: gcr.io/cloud-builders/git
    args: ['add', '-A']
  - name: gcr.io/cloud-builders/git
    args: ['config', '--global', 'user.name', 'Your Name']
  - name: gcr.io/cloud-builders/git
    args: ['config', '--global', 'user.email', 'Your Email']
  - name: gcr.io/cloud-builders/git
    args: ['commit', '-am', 'latest production commit']
  - name: gcr.io/cloud-builders/git
    args: ['branch', '-D', 'master']
  - name: gcr.io/cloud-builders/git
    args: ['branch', '-m', 'master']
  - name: gcr.io/cloud-builders/git
    args: ['push', '-f', 'https://source.developers.google.com/p/project-prod/r/project-repo', 'master']


这会将所有源代码推送到新项目中。

请注意:您需要授予Cloud Build服务帐户权限,才能将源代码推送到其他项目源存储库中。

答案 1 :(得分:0)

不幸的是,Google似乎没有在源代码存储库中提供该功能(如果可以的话,会很麻烦)。

您可以考虑的另一种选择(尽管涉及外部依赖性)是先将源存储库镜像到GitHub或Bitbucket,然后再镜像到源存储库。这样,对存储库的任何镜像所做的任何更改都将同步。 (即,在项目B中推送的更改将与Bitbucket同步,在项目A中同样如此)

编辑

为说明我的替代解决方案,这是一个简单的图

enter image description here

答案 2 :(得分:0)

正如您已经说过的,您可以在BitBucket / Github外部托管您的存储库,并将它们同步到每个项目,但是您需要为每个构建支付额外的费用。

否则,您可以使用第三方服务在外部构建您的存储库,并将结果部署到任何您想要的位置。调查CircleCI或类似服务。

答案 3 :(得分:0)

我的解决方案:从服务A,使用构建配置在分支发行版*上创建新的Cloud Build,指定$ _PROJECT_ID为您的项目B ID 记住为项目B上的项目A(@ cloudbuild.gserviceaccount.com)的服务帐户授予权限