【问题标题】:ECR image push AWS CodeBuild issueECR 图像推送 AWS CodeBuild 问题
【发布时间】:2023-03-16 19:45:01
【问题描述】:

COMMAND_EXECUTION_ERROR:执行命令时出错:$(aws ecr get-login --no-include-email --region us-east-1)。原因:退出状态 127

下面是我的 buildspec.yml 文件

version: 0.2
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - $(aws ecr get-login --region ***-east-*)
      - REPOSITORY_URI=***********.dkr.ecr.***-east-*.amazonaws.com/repositoryname
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...          
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
      - echo Writing definitions file...
      - printf '[{"name":"project-container","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > taskdefinition.json
artifacts:
    files: taskdefinition.json


【问题讨论】:

    标签: amazon-web-services aws-codebuild amazon-ecr


    【解决方案1】:

    如果它对其他人有帮助,对于我在 CodeBuild 执行的构建脚本中所做的工作。这些是我必须添加的 IAM 权限(当我遇到错误时,会一一找到它们)。

    {
        "Action": [
            "ecr:GetAuthorizationToken",
            "ecr:DescribeRepositories",
            "ecr:CreateRepository",
            "ecr:InitiateLayerUpload",
            "ecr:UploadLayerPart",
            "ecr:CompleteLayerUpload",
            "ecr:BatchCheckLayerAvailability",
            "ecr:PutImage",
            "ecs:UpdateService"
        ],
        "Resource": "*",
        "Effect": "Allow"
    }   ' 
    

    我敢肯定,如果您正在执行我在您的构建中没有执行的操作,则可能需要更多权限。我正在推动 ECR 并强制服务(以及相关任务)部署新映像。

    【讨论】:

      【解决方案2】:

      您的帖子有不一致的细节,这是故意的吗?如果不是,它可能会导致问题。你的代码 sn-p 说:

      $(aws ecr get-login --region ***-east-*)
      

      也许您故意编辑了该区域(顺便说一句,这有什么意义?)但为什么它缺少--no-include-email?在您的帖子中,您确实提到了--no-include-email,所以我知道您知道。

      在子 shell 之外运行进程以获得更好的日志

      与其在子shell(例如$(my command))中运行它,为了排除故障,请尝试运行将子shell 取出,以便获得更好的输出。在此处报告结果,以便我们解决您遇到的错误。

      aws ecr get-login --no-include-email --region us-east-1

      对比

      $(aws ecr get-login --no-include-email --region us-east-1)

      您是否已创建具有 ECR 权限的 IAM 策略供 CodeBuild 使用?

      这是非常重要的。 CodeBuild 需要代表您访问 ECR 的权限。这是我在这篇博客文章中找到的一个示例。它可能需要根据您的需要进行调整。 http://beta.awsdocs.com/services/code_build/build_docker_images/

      {
          "Action": [
              "ecr:BatchCheckLayerAvailability",
              "ecr:CompleteLayerUpload",
              "ecr:GetAuthorizationToken",
              "ecr:InitiateLayerUpload",
              "ecr:PutImage",
              "ecr:UploadLayerPart"
          ],
          "Resource": "*",
          "Effect": "Allow"
      }
      

      【讨论】:

      • 我使用了下面的代码,现在修复了以前的问题。 aws ecr get-login --no-include-email --region us-east-1 是的,我添加了提到的政策。现在我遇到了错误-COMMAND_EXECUTION_ERROR: Error while executing command: docker build -t $REPOSITORY_URI:latest .. Reason: exit status 127
      • 很高兴听到您发布的原始错误已解决!请点击复选标记接受答案。
      • 要修复您的docker build 错误,我们需要比exit status 127 更多的详细信息。因此,请在 CodeBuild 日志中向上滚动,您将获得有关该问题的更多详细信息。如果您愿意,可以将其粘贴到此处或开始新的 SO 帖子。
      猜你喜欢
      • 2019-07-24
      • 2021-07-27
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多