Выполняет вход локального клиента Docker в один или несколько частных реестров Amazon ECR или общедоступный реестр Amazon ECR.
Оглавление
В новой основной версии этого действия значение по умолчанию для ввода mask-password
изменилось с false
на true
.
Если вы не используете учетные данные Docker в качестве выходных данных в последующих заданиях, вы можете просто обновить версию действия до aws-actions/amazon-ecr-login@v2
.
Для любого клиента, использующего учетные данные Docker в качестве выходных данных в последующих заданиях:
mask-password
, которое в настоящее время является false
в версии 1, ваш рабочий процесс прервется при обновлении до версии 2. Чтобы это исправить, установите для ввода маски-пароля значение false
: - name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v2
with:
mask-password: 'false'
mask-password
значение false
, вы можете просто обновить версию действия до aws-actions/amazon-ecr-login@v2
.Дополнительную информацию о том, почему вносится это изменение, см. в разделе Маскирование учетных данных Docker в действии входа в Amazon ECR.
- name : Checkout repo
uses : actions/checkout@v3
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4 # More information on this action can be found below in the 'AWS Credentials' section
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : aws-region-1
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
- name : Build, tag, and push docker image to Amazon ECR
env :
REGISTRY : ${{ steps.login-ecr.outputs.registry }}
REPOSITORY : my-ecr-repo
IMAGE_TAG : ${{ github.sha }}
run : |
docker build -t $REGISTRY/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REPOSITORY:$IMAGE_TAG
- name : Login to Amazon ECR Public
id : login-ecr-public
uses : aws-actions/amazon-ecr-login@v2
with :
registry-type : public
- name : Build, tag, and push docker image to Amazon ECR Public
env :
REGISTRY : ${{ steps.login-ecr-public.outputs.registry }}
REGISTRY_ALIAS : my-ecr-public-registry-alias
REPOSITORY : my-ecr-public-repo
IMAGE_TAG : ${{ github.sha }}
run : |
docker build -t $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG .
docker push $REGISTRY/$REGISTRY_ALIAS/$REPOSITORY:$IMAGE_TAG
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
- name : Package and push helm chart to Amazon ECR
env :
REGISTRY : ${{ steps.login-ecr.outputs.registry }}
REPOSITORY : my-ecr-repo
run : |
helm package $REPOSITORY
helm push $REPOSITORY-0.1.0.tgz oci://$REGISTRY
- name : Login to Amazon ECR Public
id : login-ecr-public
uses : aws-actions/amazon-ecr-login@v2
with :
registry-type : public
- name : Package and push helm chart to Amazon ECR Public
env :
REGISTRY : ${{ steps.login-ecr-public.outputs.registry }}
REGISTRY_ALIAS : my-ecr-public-registry-alias
REPOSITORY : my-ecr-public-repo
run : |
helm package $REPOSITORY
helm push $REPOSITORY-0.1.0.tgz oci://$REGISTRY/$REGISTRY_ALIAS
Helm использует то же хранилище учетных данных, что и Docker, поэтому Helm может проходить аутентификацию с теми же учетными данными, которые вы используете для Docker.
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : aws-region-1
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
with :
registries : " 123456789012,998877665544 "
Репозиторию учетной записи 998877665544
необходимо явно предоставить доступ к роли: arn:aws:iam::123456789012:role/my-github-actions-role
, чтобы доступ к нескольким учетным записям работал.
Подробную информацию о настройке политик ECR см. в документации AWS.
Используйте это действие, чтобы вывести свои учетные данные Docker для входа в ECR Private, а затем используйте эти учетные данные для запуска вашего частного образа в качестве службы в другом задании.
Предупреждение
Если для mask-password
установлено значение 'false'
вывод пароля Docker будет записываться, если ведение журнала отладки включено. Дополнительную информацию см. в разделе «Учетные данные Docker» ниже.
jobs :
login-to-amazon-ecr :
runs-on : ubuntu-latest
steps :
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : us-east-1
mask-aws-account-id : ' false '
- name : Login to Amazon ECR
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
with :
mask-password : ' false '
outputs :
registry : ${{ steps.login-ecr.outputs.registry }}
docker_username : ${{ steps.login-ecr.outputs.docker_username_123456789012_dkr_ecr_us_east_1_amazonaws_com }} # More information on these outputs can be found below in the 'Docker Credentials' section
docker_password : ${{ steps.login-ecr.outputs.docker_password_123456789012_dkr_ecr_us_east_1_amazonaws_com }}
run-with-internal-service :
name : Run something with an internal image as a service
needs : login-to-amazon-ecr
runs-on : ubuntu-latest
services :
internal-service :
image : ${{ needs.login-to-amazon-ecr.outputs.registry }}/my-ecr-repo:latest
credentials :
username : ${{ needs.login-to-amazon-ecr.outputs.docker_username }}
password : ${{ needs.login-to-amazon-ecr.outputs.docker_password }}
ports :
- ' 80:80 '
steps :
- name : Run steps in container
run : echo "run steps in container"
См. action.yml для получения полной документации по входным и выходным данным этого действия.
Это действие основано на поведении AWS SDK для Javascript по умолчанию для определения учетных данных и региона AWS. Используйте действие aws-actions/configure-aws-credentials
чтобы настроить среду GitHub Actions с использованием роли с использованием поставщика OIDC GitHub и желаемого региона.
- name : Configure AWS credentials
uses : aws-actions/configure-aws-credentials@v4
with :
role-to-assume : arn:aws:iam::123456789012:role/my-github-actions-role
aws-region : us-east-1
- name : Login to Amazon ECR Private
id : login-ecr
uses : aws-actions/amazon-ecr-login@v2
Мы рекомендуем следовать рекомендациям Amazon IAM при использовании сервисов AWS в рабочих процессах GitHub Actions, в том числе:
aws-actions/configure-aws-credentials
чтобы получить пример.URI реестра для ECR Private и ECR Public следующие:
123456789012.dkr.ecr.aws-region-1.amazonaws.com
public.ecr.aws
После входа в систему вы можете получить доступ к имени пользователя и паролю Docker через выходные данные действий, используя следующий формат:
При использовании ECR Private:
docker_username_123456789012_dkr_ecr_aws_region_1_amazonaws_com
docker_password_123456789012_dkr_ecr_aws_region_1_amazonaws_com
При использовании ECR Public:
docker_username_public_ecr_aws
docker_password_public_ecr_aws
Важный
Если вы не используете выходные данные учетных данных Docker, убедитесь, что ввод mask-password
не установлен или имеет значение 'true'
. Это маскирует ваш пароль Docker и предотвращает его печать в журналах действий, если вы включаете ведение журнала отладки.
Если вы используете выходные данные учетных данных Docker, убедитесь, что для ввода mask-password
установлено значение 'false'
. Маскированные значения нельзя передавать в отдельные задания (см. эту проблему).
Если вы работаете в локальных средах и/или в защищенных средах, где вам необходимо использовать определенный прокси-сервер, вы можете установить его в действии вручную.
Кроме того, это действие всегда будет учитывать уже настроенный прокси-сервер в среде.
Прокси настроен через ввод действия:
uses : aws-actions/amazon-ecr-login@v2
with :
http-proxy : " http://companydomain.com:3128 "
Прокси настроен через переменную среды:
# Your environment configuration
HTTP_PROXY= " http://companydomain.com:3128 "
Действие прочитает базовую конфигурацию прокси-сервера из среды, и вам не нужно настраивать ее в действии.
Чтобы узнать, как и где реализовать указанные ниже разрешения, см. раздел IAM в Руководстве пользователя Amazon ECR.
Для этого действия требуется следующий минимальный набор разрешений для входа в ECR Private:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:GetAuthorizationToken "
],
"Resource" : " * "
}
]
}
Команды Docker в рабочем процессе действий GitHub, такие как docker pull
и docker push
, могут потребовать дополнительных разрешений, прикрепленных к учетным данным, используемым этим действием.
Для извлечения образа из частного репозитория ECR требуются следующие минимальные разрешения:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPull " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:BatchGetImage " ,
" ecr:GetDownloadUrlForLayer "
],
"Resource" : " arn:aws:ecr:us-east-1:123456789012:repository/my-ecr-repo "
}
]
}
Для отправки и получения изображений в частном репозитории ECR требуются следующие минимальные разрешения:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPushPull " ,
"Effect" : " Allow " ,
"Action" : [
" ecr:BatchGetImage " ,
" ecr:BatchCheckLayerAvailability " ,
" ecr:CompleteLayerUpload " ,
" ecr:GetDownloadUrlForLayer " ,
" ecr:InitiateLayerUpload " ,
" ecr:PutImage " ,
" ecr:UploadLayerPart "
],
"Resource" : " arn:aws:ecr:us-east-1:123456789012:repository/my-ecr-repo "
}
]
}
Чтобы узнать, как и где реализовать указанные ниже разрешения, см. раздел IAM Общедоступного руководства пользователя Amazon ECR.
Для этого действия требуется следующий минимальный набор разрешений для входа в ECR Public:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " GetAuthorizationToken " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:GetAuthorizationToken " ,
" sts:GetServiceBearerToken "
],
"Resource" : " * "
}
]
}
Команды Docker в рабочем процессе действий GitHub, такие как docker push
, могут потребовать дополнительных разрешений, прикрепленных к учетным данным, используемым этим действием. Для получения изображений из ECR Public не требуется никаких разрешений.
Для отправки образа в общедоступный репозиторий ECR требуются следующие минимальные разрешения:
{
"Version" : " 2012-10-17 " ,
"Statement" : [
{
"Sid" : " AllowPush " ,
"Effect" : " Allow " ,
"Action" : [
" ecr-public:BatchCheckLayerAvailability " ,
" ecr-public:CompleteLayerUpload " ,
" ecr-public:InitiateLayerUpload " ,
" ecr-public:PutImage " ,
" ecr-public:UploadLayerPart "
],
"Resource" : " arn:aws:ecr-public::123456789012:repository/my-ecr-public-repo "
}
]
}
Inaccessible host: 'api.ecr-public.aws-region-1.amazonaws.com' at port 'undefined'. This service may not be available in the 'aws-region-1' region.
AWS_DEFAULT_REGION
настроена как регион, в котором ECR Public недоступен.us-east-1
. В действии aws-actions/configure-aws-credentials
входные данные aws-region
должны быть us-east-1
. GetAuthorizationToken command is only supported in us-east-1.
AWS_DEFAULT_REGION
настроена как us-west-2
.us-east-1
. В действии aws-actions/configure-aws-credentials
входной параметр aws-region
должен быть us-east-1
. Invalid parameter at 'registryIds' failed to satisfy constraint: 'Member must satisfy constraint: [Member must satisfy regular expression pattern: [0-9]{12}]'
registries
не представляет собой последовательность из 12 цифр.registries
только один идентификатор реестра, если идентификатор начинается с 0, обязательно заключите его в кавычки. Действия GitHub будут считывать входные данные как число, если все символы во входных данных являются цифрами. Таким образом, если ваш идентификатор реестра начинается с 0, 0 будет усечен. См. выпуск №225. Этот код доступен по лицензии MIT.
Если вы хотите сообщить о потенциальной проблеме безопасности в этом проекте, не создавайте проблему на GitHub. Вместо этого следуйте инструкциям здесь или отправьте электронное письмо в службу безопасности AWS.