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的主要内容,如果未能解决你的问题,请参考以下文章

通过 CI runner 将文件推送到 gitlab-ci

如何从 gitlab CI 管道中推送到仓库?

gitlab-ci docker-in-docker 访问不安全的注册表

从 GitLab CI 运行器连接到 docker-in-docker

如何使用 CI/CD 为 Gitlab 注册表推送基于 docker compose 的图像

Lombok 作为 Gitlab CI 中 mevan docker 映像的提供者?