[英]Jenkins Amazon ECR: no basic auth credentials
I'm not able to push ocker images to Amazon ECR with Jenkins Pipeline: I always get no basic auth credentials
:-(我无法使用 Jenkins 管道将 ocker 图像推送到 Amazon ECR:我总是得不到no basic auth credentials
:-(
Here is my setup:这是我的设置:
aws-jenkins
to Jenkins (tested locally and successfully pushed to AWS ECR)我已将 AWS 凭据aws-jenkins
添加到 Jenkins(在本地测试并成功推送到 AWS ECR)/root/.dockercfg
to debug auth in my Jenkinsfile
我打印/root/.dockercfg
以在我的Jenkinsfile
中调试 authJenkinsfile:詹金斯文件:
stage("Docker") {
dir(path) {
docker.build("my-image:latest")
}
docker.withRegistry("https://<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com", "ecr:eu-central-1:aws-jenkins") {
sh "cat /root/.dockercfg" // debug
docker.image("my-image:latest").push()
}
}
Logs:日志:
[Pipeline] withDockerRegistry
Wrote authentication to /root/.dockercfg
[Pipeline] {
[Pipeline] sh
[docker-emotion-compilers] Running shell script
+ cat /root/.dockercfg
{"https://<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com": {
"auth": "[...]",
"email": "nobody@example.com"
}}[Pipeline] sh
[docker-emotion-compilers] Running shell script
+ docker tag --force=true my-image:latest <my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image:latest
Warning: '--force' is deprecated, it will be removed soon. See usage.
[Pipeline] sh
[docker-emotion-compilers] Running shell script
+ docker push <my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image:latest
The push refers to a repository [<my-aws-id>.dkr.ecr.eu-central-1.amazonaws.com/my-image]
e30bf54e0f87: Preparing
b9f2c30c0d28: Preparing
5defc95691fd: Preparing
295d6a056bfd: Preparing
no basic auth credentials
[Pipeline] }
[Pipeline] // withDockerRegistry
Any ideas?有任何想法吗?
UPDATE (2017-05-23):更新(2017-05-23):
Here is the Jira issue: https://issues.jenkins-ci.org/browse/JENKINS-44143这是 Jira 问题: https ://issues.jenkins-ci.org/browse/JENKINS-44143
Even that it seems logical that docker.withRegistry will perform a login to ECR at start and logout when done, it is not performed.即使 docker.withRegistry 将在开始时执行登录到 ECR 并在完成后注销看起来合乎逻辑,它也不会执行。 Therefor you must install awscli and add ECR login command before you perform the push.因此,您必须在执行推送之前安装awscli并添加 ECR 登录命令。
sh("eval \$(aws ecr get-login --no-include-email | sed 's| https://|| ')") sh("eval \$(aws ecr get-login --no-include-email | sed 's| https://|| ')")
See http://www.tikalk.com/devops/ecr-in-pipeline/ for detailed example.有关详细示例,请参阅http://www.tikalk.com/devops/ecr-in-pipeline/ 。
just remove or rename $HOME/.docker/config.json file from your local pc or cloud server.只需从本地 pc 或云服务器中删除或重命名$HOME/.docker/config.json文件。 It will solve the no basic auth credentials issue.它将解决没有基本身份验证凭据的问题。
Follow the below step in your terminal:在您的终端中执行以下步骤:
mv $HOME/.docker/config.json $HOME/.docker/config.json.backup
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.