尝试从私有 Codecommit 存储库中提取时,NPM 在 CodeBuild 上安装失败

NPM Install Failing on CodeBuild while trying to pull from private Codecommit repo

我在 codecommit 中的一个 repo 正在尝试从我的另一个 codecommit repos 中提取。

在第一个 repo 的 package.json 中有依赖项:

"dependencies": {
      "repo-2": "git+https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/repo-2.git#TAG"
}

我的代码构建在尝试 npm install 时抛出错误(代码构建使用的是 nodejs12):

npm ERR! Command failed: git clone --mirror -q https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/repo-2.git 
   /root/.npm/_cacache/tmp/git-clone-3d2bf4b6/.git
npm ERR! warning: templates not found in /tmp/pacote-git-template-tmp/git-clone-7cae5b66
npm ERR! 
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-01-26T11_58_45_260Z-debug.log

我已确保在我的策略中提供正确的权限:

      - Sid: CodeCommitRepoAccess
        Effect: Allow
        Action:
          - codecommit:GetRepository
          - codecommit:GitPull
          - codecommit:GetFolder
        Resource: 
          - arn:aws:codecommit:eu-west-1:*
      - Sid: CodeCommitListRepos
        Effect: Allow
        Action:
          - codecommit:ListRepositories
        Resource: "*" 

我在 buildspec.yaml 中添加了 git-credential helper:

env:
   git-credential-helper: yes

我真的不知道为什么会失败,而且错误消息没有让我知道需要修复的地方。也许我错过了政策中的一些权限? - 但由于它不是 403 错误,我不确定。我可以在我的机器上本地 npm install 没有任何问题。

编辑: 实际上更清楚,我正在尝试从 repo-1 构建,它依赖于 repo-2 和 repo-3。此外,repo-2 也依赖于 repo-3。我尝试 运行 npm install 没有嵌套的私有存储库(将其从 package.json 中删除作为测试)但构建仍然以同样的方式失败。

更新: 我将 git ls-remote -h -t https://git-codecommit.eu-west-1.amazonaws.com/v1/repos/repo-2.git 行添加到我的构建规范中,这在 repo-2 中正确地 returns branches/tags,因此权限看起来很好。

如果有人遇到同样的问题,请回答:

在安装阶段将以下内容添加到我的构建规范中解决了问题:

      - git config --global credential.helper '!aws codecommit credential-helper $@'
      - git config --global credential.UseHttpPath true

我还需要从我的构建规范中删除 git-credential helper:

env:
    git-credential-helper: yes

我认为导致问题的原因是 npm install 在使用 env 设置时没有选择 git-credential helper,但在明确设置时确实被选择了.