Ошибка AWS CodeBuild для DOWNLOAD_SOURCE: CLIENT_ERROR: хранилище не найдено для первоисточника и исходной версии - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь создать проект CodeBuild с использованием Terraform, но при сборке я получаю следующую ошибку на шаге DOWNLOAD_SOURCE:

CLIENT_ERROR: хранилище не найдено для первоисточника и исходной версии

Этот проект использует репозиторий CodeCommit в качестве источника.Это странно, потому что все ссылки на репозиторий из графического интерфейса консоли CodeCommit работают нормально для этой сборки - я вижу коммиты, нажимаю на ссылку и добираюсь до репозитория CodeCommit и т. Д., Так что установка Source выглядит хорошо.Политика, используемая для сборки, имеет разрешения «codecommit: GitPull» для хранилища.

Странно, если я зайду в сборку в консоли и сниму флажок «Разрешить AWS CodeBuild изменять эту роль службы, чтобы ее можно было использовать с этим проектом сборки», а затем «Обновить источники», сборка будет работать!Но я не могу найти какой-либо способ установить это с помощью Terraform, и он по умолчанию снова включится, если вы вернетесь к экрану «Обновление источников».

Вот код Terraform, который я использую для создания сборки.

# IAM role for CodeBuild 
resource "aws_iam_role" "codebuild_myapp_build_role" {
  name = "mycompany-codebuild-myapp-build-service-role"
  description = "Managed by Terraform"
  path = "/service-role/"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "codebuild.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

# IAM policy for the CodeBuild role
resource "aws_iam_policy" "codebuild_myapp_build_policy" {
  name = "mycompany-codebuild-policy-myapp-build-us-east-1"
  description = "Managed by Terraform"
  policy = <<POLICY
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:CompleteLayerUpload",
                "ecr:GetAuthorizationToken",
                "ecr:InitiateLayerUpload",
                "ecr:PutImage",
                "ecr:UploadLayerPart"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "logs:CreateLogStream",
                "codecommit:GitPull",
                "logs:PutLogEvents",
                "s3:GetObjectVersion"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:000000000000:log-group:/aws/codebuild/myapp-build",
                "arn:aws:logs:us-east-1:000000000000:log-group:/aws/codebuild/myapp-build:*",
                "arn:aws:s3:::codepipeline-us-east-1-*",
                "arn:aws:codecommit:us-east-1:000000000000:mycompany-devops-us-east-1"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": [
                "arn:aws:logs:us-east-1:000000000000:log-group:/aws/codebuild/myapp-build",
                "arn:aws:logs:us-east-1:000000000000:log-group:/aws/codebuild/myapp-build:*"
            ]
        }
    ]
}
POLICY
}

# attach the policy
resource "aws_iam_role_policy_attachment" "codebuild_myapp_build_policy_att" {
    role       = "${aws_iam_role.codebuild_myapp_build_role.name}"
    policy_arn = "${aws_iam_policy.codebuild_myapp_build_policy.arn}"
}

# codebuild project
resource "aws_codebuild_project" "codebuild_myapp_build" {
    name = "myapp-build"
    build_timeout = "60"
    service_role = "${aws_iam_role.codebuild_myapp_build_role.arn}"

    artifacts {
        type = "NO_ARTIFACTS"
    }

    environment {
        compute_type = "BUILD_GENERAL1_SMALL"
        image = "aws/codebuild/docker:17.09.0"
        type = "LINUX_CONTAINER"
        privileged_mode = "true"

        environment_variable {
            "name" = "AWS_DEFAULT_REGION"
            "value" = "us-east-1"
        }

        environment_variable {
            "name" = "AWS_ACCOUNT_ID"
            "value" = "000000000000"
        }

        environment_variable {
            "name" = "IMAGE_REPO_NAME"
            "value" = "myapp-build"
        }

        environment_variable {
            "name" = "IMAGE_TAG"
            "value" = "latest"
        }

        environment_variable {
            "name" = "DOCKERFILE_PATH"
            "value" = "docker/codebuild/myapp_build_agent"
        }
    }

    source {
        type = "CODECOMMIT"
        location = "mycompany-devops-us-east-1"
        git_clone_depth = "1"
        buildspec = "docker/myapp/myapp_build/buildspec.yml"
    }

    tags {
        Name = "myapp-build"
        Environment = "${var.env_name}"   
        Region = "${var.aws_region}"
        ResourceType = "CodeBuild Project"
        ManagedBy = "Terraform"
    }
}

1 Ответ

0 голосов
/ 23 января 2019

Ваша проблема заключается в спецификации источника:

source {
    type = "CODECOMMIT"
    location = "mycompany-devops-us-east-1"

Вот документация Amazon для источника , что имеет отношение с некоторым акцентом:

Для исходного кода в репозитории AWS CodeCommit: URL-адрес клонирования HTTPS в хранилище, которое содержит исходный код и спецификацию сборки (например, https://git -codecommit.region-ID.amazonaws.com / v1 / repos / repo-name ).

В вашем случае это, вероятно, что-то вроде этого, с использованием 'clone url', найденного в codecommitconsole:

https://git-codecommit.us-east-1.amazonaws.com/v1/repos/mycompany-devops-us-east-1

Я столкнулся с этим, когда использовал частный репозиторий github source.В моем случае я дал URL, а не ссылку на клон на github, поэтому проблема была очень похожа:

bad:  https://github.com/privaterepo/reponame
good: https://github.com/privaterepo/reponame.git
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...