AWS CodeBuild 和 CodeCommit 存储库作为 npm 依赖项

AWS CodeBuild and CodeCommit repo as npm dependency

我们有 2 份报告

  1. 回购 1
  2. 回购 2

Repo 1 内部 > package.json 有一个依赖关系

"dependencies": {
    "repo-2": "git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/repo-2/"
}

然后,在 "repo-1" 的 CodeBuild 中,我们有以下构建规范

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
      - mkdir -p ./deploy
  build:
    commands:
      - echo "Server copy START $(date)"
      - cp -r ./index.js ./deploy/index.js
      - cp -r ./package.json ./deploy/package.json
      - cp -r ./buildspec.yml ./deploy/buildspec.yml
      - echo "Server copy END $(date)"
      - echo "Server npm install START $(date)"
      - cd ./deploy && npm install --production
      - echo "Server npm install END $(date)"
  post_build:
    commands:
artifacts:
  files:
        - '**/*'
  base-directory: 'deploy'

CodeBuild抛出的错误如下

npm ERR! fatal: unable to access 'https://git-codecommit.us-east-1.amazonaws.com/v1/repos/repo-2/': The requested URL returned error: 403 

基本上,问题是:我可以使用 CodeCommit 存储库作为 npm 依赖项吗?正确的方法是什么?

尝试#1

我尝试添加这个(和类似的变体)但没有成功 https://medium.com/@ngchiwang/aws-npm-install-private-codecommit-module-8512c3203c37

#尝试2

我也试过把依赖URL改成这个

"repo-2": "git://git-codecommit.us-east-1.amazonaws.com/v1/repos/repo-2"

但是出现以下错误

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fatal: unable to connect to git-codecommit.us-east-1.amazonaws.com: 
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: git-codecommit.us-east-1.amazonaws.com[0: 52.94.233.146]: errno=Connection refused

尝试使用您的私有 AWS CodeCommit 存储库作为您的 npm 模块,使用以下命令:

git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
git config --global url."ssh://".insteadOf https://
npm install --save git+https://<your_repo_url>#master

如果您想改为使用 npm 依赖项,请在此处查看类似问题的答案:npm install private github repositories by dependency in package.json

我今天 运行 遇到了同样的问题,并通过在 envgit-credential-helper =20=] buildspec 文件的部分。

示例:

version: 0.2
env:
  git-credential-helper: yes
phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
      - npm install
  build:
    commands:
      - npm run build

这与策略中的 CodeCommit 权限(您说您已经拥有)相结合,导致使用来自 CodeCommit 的私有 npm 包进行工作构建。

上周我遇到了类似的问题,所以将分享为亚马逊团队推荐的解决方案。

更好的方法是在构建规范文件的 env 部分将 "git-credential-helper" 设置为 yes [1],然后可以使用 https 访问存储库。请参考下面的 BuildSpec 示例。

================构建规范代码段=================

版本:0.2

env:
    git-credential-helper: yes

phases:
    pre_build:
        commands:
        - /usr/bin/git ls-remote -h -t https://git-codecommit.us-east-1.amazonaws.com/v1/repos/repo-2/

================构建规范代码段=================

此外,请确保您已提供访问 CodeBuild IAM 角色中的 CodeCommit 存储库所需的权限。我在下面提供了相同的示例 IAM 策略,您可以参考这些策略来根据您的用例提供权限:

===========IAM 策略示例=============

   {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "codecommit:GetRepository",
                    "codecommit:GitPull",
                    "codecommit:GetFolder"
                ],
                "Resource": "arn:aws:codecommit:us-east-1:<put repo Name or *>"
            },
            {
                "Sid": "VisualEditor1",
                "Effect": "Allow",
                "Action": "codecommit:ListRepositories",
                "Resource": "*"
            }
        ]
    }

===========IAM 策略示例=============

请检查上述方法是否有助于实现您的用例。

请注意,上面的构建规范片段只是一个示例,用于说明如何访问 CodeCommit 存储库,需要根据您的要求进行修改。例如,您可以在 package.json 中描述您的存储库依赖性,如下所示,我假设您已经在做,并且 运行 npm install 通过代码构建中的构建规范文件进行安装。

"dependencies": {
    "my-npm": "git+https://git-codecommit.us-east-1.amazonaws.com/v1/repos/<repo name>"
},