[英]Building and pushing docker image from Gitlab-CI to Amazon AWS ECR
[英]How to login to AWS ECR from Gitlab CI to download a Docker image
我正在使用 Gitlab 管道。 跑步者托管在 Gitlab 中。
为了减少构建时间,我构建了一个包含 Maven 依赖项的自定义映像。 因此,在每次构建期间,不会从 Internet 下载 Maven 依赖项。
我将自定义图像推送到 AWS ECR。 但 Gitlab CI 无法下载此图像。
这是错误日志:
Running with gitlab-runner 14.3.0-rc1 (ed15bfbf)
on docker-auto-scale z3WU8uu-
Preparing the "docker+machine" executor
Using Docker executor with image ***.dkr.ecr.eu-west-1.amazonaws.com/***:latest ...
Pulling docker image 301768173512.dkr.ecr.eu-west-1.amazonaws.com/inuka-ci:latest ...
WARNING: Failed to pull image with policy "always": Error response from daemon: Get https://301768173512.dkr.ecr.eu-west-1.amazonaws.com/v2/inuka-ci/manifests/latest: no basic auth credentials (manager.go:214:0s)
ERROR: Job failed (system failure): failed to pull image "301768173512.dkr.ecr.eu-west-1.amazonaws.com/inuka-ci:latest" with specified policies [always]: Error response from daemon: Get https://301768173512.dkr.ecr.eu-west-1.amazonaws.com/v2/inuka-ci/manifests/latest: no basic auth credentials (manager.go:214:0s)
由于管道是由 Gitlab CI 触发的,因此我无法在管道启动之前执行 docker docker login
命令。
如何在管道启动之前让我的 gitlab 管道登录到 AWS ECR?
编辑答案,我之前误读了这个问题:
创建一个至少对 ECR 具有只读访问权限的 IAM 用户并设置以下环境变量: AWS_ACCESS_KEY_ID
、 AWS_SECRET_ACCESS_KEY
、 AWS_DEFAULT_REGION
。
在能够从 ECR 中提取图像之前,您需要使用 AWS cli 获取令牌。 向 ECR 提供身份验证凭据的一种方法是定义一个名为DOCKER_AUTH_CONFIG
的变量。 它具有以下结构:
{
"auths": {
"myregistryurl.com": {
"auth": "base64(username:password)"
}
}
}
您需要在另一个管道中定义这样的步骤,因为主管道在启动时需要令牌:
aws_token:
image:
name: amazon/aws-cli
entrypoint: [""]
script:
- USER=AWS
- TOKEN=$(aws ecr get-login-password)
- AUTH=$(echo "$USER:$TOKEN" | base64 | tr -d "\n")
- echo $AUTH
将日志中显示的值作为变量DOCKER_AUTH_CONFIG
的值放入主管道。 这样,管道的下一次运行将正确地拉取图像。
请注意,此令牌将在 12 小时后过期,当该时间过期时,您将需要再次启动此作业。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.