Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何从另一个项目访问GCP云源存储库?_Google Cloud Platform_Google Cloud Build_Google Cloud Repository - Fatal编程技术网

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

Google cloud platform 如何从另一个项目访问GCP云源存储库?,google-cloud-platform,google-cloud-build,google-cloud-repository,Google Cloud Platform,Google Cloud Build,Google Cloud Repository,我有项目A和项目B 我将项目a上的GCP云源存储库用作我的“源”远程存储库 我使用带有触发器的云构建来触发repo的“开发”分支的更改。作为构建的一部分,我使用gcloudbuilder部署了一些东西到projecta 现在,我想在项目B上运行相同的构建。可能是相同的分支,也可能是不同的分支(即“release-*”)。最后,我想用gcloudbuilder将一些东西部署到projectb中 问题是,当我在项目B(在谷歌云控制台中)上时,我甚至看不到项目A中的repo。它要求我“连接存储库”,但

我有项目A和项目B

我将项目a上的GCP云源存储库用作我的“源”远程存储库

我使用带有触发器的云构建来触发repo的“开发”分支的更改。作为构建的一部分,我使用gcloudbuilder部署了一些东西到projecta

现在,我想在项目B上运行相同的构建。可能是相同的分支,也可能是不同的分支(即“release-*”)。最后,我想用gcloudbuilder将一些东西部署到projectb中

问题是,当我在项目B(在谷歌云控制台中)上时,我甚至看不到项目A中的repo。它要求我“连接存储库”,但我只能选择GitHub或Bitbucket repo进行镜像。“云源存储库”选项变灰,告诉我它们“已经连接”。很明显,这不是另一个项目中的一个

我可以在项目B上建立一个新的回购协议,并推动两个回购协议,但这似乎效率低下(而且可能无法长期持续)。奇怪的是,使用外部Bitbucket/GitHub repo作为源并在两个项目中镜像,这样的设置很容易实现

在没有外部依赖的谷歌云平台上,这样的事情有可能发生吗


我还尝试在项目A中运行我的所有构建,并有一个单独的触发器部署到项目B(我使用替换来管理它),但由于权限问题,它失败了。云构建似乎总是使用云构建服务帐户运行,您可以管理其中的角色,但我不知道如何授予它访问其他项目的权限。同样,在这种情况下,两个版本在单个版本历史中似乎无法区分,这是不理想的。

不幸的是,谷歌似乎没有在源代码存储库中提供这一功能(如果可以的话,它会动摇)

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

编辑

为了说明我的替代解决方案,这里有一个简单的图表


正如您所说,您可以在BitBucket/Github外部托管您的回购协议,并将其同步到每个项目,但您需要为每个构建支付额外费用

您可以使用其他第三方服务在外部构建您的回购协议,并将结果部署到您想要的任何地方,例如。查看CircleCI或类似服务


您可以授予构建权限,使其可以引用另一个项目中的资源,但我会将它们分开以最小化复杂性

我遇到了一个类似的问题,我通过使用多个云构建文件解决了这个问题

一个云构建文件(当代码被推送到某个分支时触发)专门用于将我的所有源代码复制到新的项目源repo中,它还拥有自己的云构建文件以部署到该项目

以下是将源复制到另一个项目的云构建文件示例:


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']


这就把所有的源代码都推到了新项目中

请注意:您需要授予云构建服务帐户权限,以便将源代码推送到其他项目源代码存储库。

我的解决方案:

  • 从服务A,在分支
    发布-*
    上创建新的云构建,并使用构建配置指定
    $\u项目ID
    项目B ID
  • 在GCP云构建定义中,添加新变量名
    \u PROJECT\u ID
    isPROJECT B ID
  • 注意:记住为项目B上的项目A(@cloudbuild.gserviceaccount.com)的服务帐户授予许可证

    cloudbuild.yaml

      - name: gcr.io/cloud-builders/docker
        args:
          - build
          - '--no-cache'
          - '-t'
          - '$_GCR_HOSTNAME/$_PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
          - .
          - '-f'
          - Dockerfile
        id: Build
      - name: gcr.io/cloud-builders/docker
        args:
          - push
          - '$_GCR_HOSTNAME/$_PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
        id: Push
      - name: gcr.io/cloud-builders/gcloud
        args:
          - beta
          - run
          - deploy
          - $_SERVICE_NAME
          - '--platform=managed'
          - '--image=$_GCR_HOSTNAME/$_PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
          - >-
            --labels=managed-by=gcp-cloud-build-deploy-cloud-run,commit-sha=$COMMIT_SHA,gcb-build-id=$BUILD_ID,gcb-trigger-id=$_TRIGGER_ID,$_LABELS
          - '--region=$_DEPLOY_REGION'
          - '--quiet'
          - '--project=$_PROJECT_ID'
        id: Deploy
        entrypoint: gcloud
    images:
      - '$_GCR_HOSTNAME/$_PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
    options:
      substitutionOption: ALLOW_LOOSE
    timeout: '20m'
    tags:
      - gcp-cloud-build-deploy-cloud-run
      - gcp-cloud-build-deploy-cloud-run-managed
      - driveit-hp-agreement-mngt-api```
    
    
      [1]: https://i.stack.imgur.com/XhRJ4.png
    

    您好,这是将存储库从项目A复制到项目B的推荐方法吗?您好,您选择了什么方法来解决此问题?@Madhi我放弃了这种方法,继续使用现有的on-prem基础结构来管理我们的构建。我相信在我们的GCP结构中,在更高级别上建立共享回购是可能的,但我没有访问权限,也没有人对此感兴趣。GCP上有一个开放的功能请求!请投票!我做不到。。。你能更好地描述一下你是如何做到这一点的吗?当我尝试将$\u PROJECT\u ID添加到我的云构建YAML时,它会说这个值不存在@nicolasassi您需要将变量名
    \u PROJECT\u ID
    添加到您的云构建中