Gitlab CI - Docker 推送到 AWS ECR
Posted
技术标签:
【中文标题】Gitlab CI - Docker 推送到 AWS ECR【英文标题】:Gitlab CI - Docker push to AWS ECR 【发布时间】:2019-02-23 16:44:11 【问题描述】:我今天在没有帮助的情况下花了 5 个小时。这是场景/设置。
1) Windows Server - Gitlab-runner 正在运行,构建并推送到服务器上的 docker 注册表以用于开发分支
2) 对于 master 分支,我想将 docker 镜像推送到 AWS ECR。
3) 我已经安装了 AWS CLI 并添加到构建服务器上的全局 PATH 变量中。我可以运行命令并成功推送到 AWS ECR。
4)问题 - 当我从 CI .yml 文件执行相同的脚本时,它失败了。 我的 gitlab-runner 在“cmd”“shell”模式下运行,我的脚本格式相同。 但要获取 AWS 登录令牌,我必须执行以下命令:
powershell Invoke-Expression -Command (aws ecr get-login --no-include-email)
我可以在 cmd 提示符下运行上述命令,但是当运行器尝试执行此命令时,它无法识别“aws”。
“aws”的路径是“C:\Program Files\Amazon\AWSCLI\bin\aws.exe”
怎么办?有没有人尝试在 windows 平台上使用 cmd shell 脚本登录 AWS ECR。
更新: 您认为以下任何一项都会奏效吗?我现在无法访问我的服务器,我将在明天早上对其进行测试。
powershell Invoke-Expression -Command (powershell aws ecr get-login --no-include-email)
OR
powershell $abc = & "C:\Program Files\Amazon\AWSCLI\bin\aws" ecr get-login --no-include-email; Invoke-Expression $abc
OR
powershell
$abc = & "C:\Program Files\Amazon\AWSCLI\bin\aws" ecr get-login --no-include-email
Invoke-Expression $abc;
exit
OR
powershell -command C:\Work\awsbat.ps1
awsbat.ps1 file =
$abc = & "C:\Program Files\Amazon\AWSCLI\bin\aws" ecr get-login --no-include-email
Invoke-Expression $abc
回答:
选项 4 对我有用。
Execute following in gitlab CI yml file:
powershell -command C:\Work\awsbat.ps1
contents of awsbat.ps1 file =
$abc = & "C:\Program Files\Amazon\AWSCLI\bin\aws" ecr get-login --no-include-email
Invoke-Expression $abc
【问题讨论】:
aws 在 PATH 变量中,我已经对其进行了验证和测试。第二个选项不起作用,我已经尝试提供完整路径,它给出了语法错误。 我想知道,有没有什么方法可以在没有 AWSCLI 的情况下进行推送。只需在 docker config 或类似的东西中使用我的 IAM 角色 ID/Key。 是的,您可以为此利用 ecr 凭证助手。参考:lwpro2.wordpress.com/2019/10/30/… 【参考方案1】:是的,您可以为此利用 ecr 凭证助手。参考:https://lwpro2.wordpress.com/2019/10/30/authenticating-amazon-ecr-repositories-for-docker-cli-with-credential-helper/
【讨论】:
以上是关于Gitlab CI - Docker 推送到 AWS ECR的主要内容,如果未能解决你的问题,请参考以下文章
gitlab-ci docker-in-docker 访问不安全的注册表
从 GitLab CI 运行器连接到 docker-in-docker