Докер подтолкнул к проблеме AWS ECR - PullRequest
0 голосов
/ 03 марта 2019

в течение пары дней я сталкиваюсь с проблемой передачи изображения из jenkins в ECR и перезапуска службы.

Мой экземпляр Jenkins размещается в экземпляре EC2 через ECS.(он также создан как образ докера).

Я хочу создать образ, войти в систему ECR, вставить туда образ и перезапустить службу.Вход в ECR проблематичен:

  1. , когда я делаю "unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI", команда "aws ecr get-login --region us-east-1" успешна, но push-изображение остановлено "no basic"аутентификационные данные ".
  2. , когда я не вызываю" unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI "Я даже не могу войти в ECR.

Я много гуглил и анализировал, но не могу найти ответа.Есть идеи, что может вызвать проблемы?Это настройки IAM или ecs-agent?

Политика, используемая для запуска задачи jenkins:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "ecr:GetAuthorizationToken"
        ],
        "Resource": "*",
        "Effect": "Allow",
        "Sid": "GetAuthorizationToken"
    },
    {
        "Action": [
            "ecr:GetDownloadUrlForLayer",
            "ecr:BatchGetImage",
            "ecr:BatchCheckLayerAvailability",
            "ecr:PutImage",
            "ecr:InitiateLayerUpload",
            "ecr:UploadLayerPart",
            "ecr:CompleteLayerUpload"
        ],
        "Resource": [
            "arn:aws:ecr:*:*:repository/salesiq*",
            "arn:aws:ecr:*:*:repository/comhub*",
            "arn:aws:ecr:*:*:repository/ssrt*",
            "arn:aws:ecr:*:*:repository/reveal*",
            "arn:aws:ecr:*:*:repository/se-*"
        ],
        "Effect": "Allow",
        "Sid": "EcrManagement"
    },
    {
        "Condition": {
            "ArnLike": {
                "ecs:cluster": [
                    "arn:aws:ecs:*:*:cluster/salesiq*",
                    "arn:aws:ecs:*:*:cluster/comhub*",
                    "arn:aws:ecs:*:*:cluster/ssrt*",
                    "arn:aws:ecs:*:*:cluster/reveal*",
                    "arn:aws:ecs:*:*:cluster/se-*"
                ]
            }
        },
        "Action": [
            "ecs:RunTask",
            "ecs:StartTask",
            "ecs:StopTask",
            "ecs:DescribeClusters",
            "ecs:DescribeServices",
            "ecs:ListClusters",
            "ecs:DescribeContainerInstances",
            "ecs:StopTask"
        ],
        "Resource": "*",
        "Effect": "Allow",
        "Sid": "EcsManagement"
    },
    {
        "Action": [
            "ecs:List*",
            "ecs:Describe*",
            "ecr:Describe*",
            "ecr:Get*",
            "ecr:Describe*",
            "ecr:List*",
            "cloudwatch:Get*",
            "cloudwatch:List*",
            "cloudwatch:Describe*",
            "ecs:UpdateService"
        ],
        "Resource": "*",
        "Effect": "Allow",
        "Sid": "EcsListing"
    }
]

}

1 Ответ

0 голосов
/ 03 марта 2019

Я думаю, что вам может не хватать только команды docker login сама команда.Который не упоминается в вашем вопросе.Поэтому вам необходимо следующее:

    aws ecr get-login --region region --no-include-email

, а затем вы хотите выполнить вывод вышеприведенной команды;

    docker login -u AWS -p password https://aws_account_id.dkr.ecr.us-east-1.amazonaws.com

В качестве альтернативы вы можете запустить;

    $(aws ecr get-login --no-include-email --region eu-west-1)

а затем

    docker push $ecr_repo:latest

Пример сценариев bash, которые я запускаю в своем конвейере;

    #!/bin/bash
    set -ex

    # $branch: current git branch
    # $commit: hash of the current git commit
    # $ecr_repo: Self explanatory

    $(aws ecr get-login --no-include-email --region eu-west-1)
    docker pull $ecr_repo:latest
    docker build --cache-from $ecr_repo:latest -t image_name .
    docker tag image_name:latest $ecr_repo:$commit
    if [ "$branch" = "master" ]; then
      docker tag image_name:latest $ecr_repo:latest
      docker push $ecr_repo:latest
    fi
    docker push $ecr_repo:$commit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...