【问题标题】:Jenkins Amazon ECR: no basic auth credentialsJenkins Amazon ECR:没有基本的身份验证凭证
【发布时间】:2017-09-29 17:05:27
【问题描述】:

我无法使用 Jenkins Pipeline 将 ocker 图像推送到 Amazon ECR:我总是收到 no basic auth credentials :-(

这是我的设置:

  • 詹金斯 2.46.2
  • Amazon ECR plugin 1.4
  • 我已将 AWS 凭证 aws-jenkins 添加到 Jenkins(在本地测试并成功推送到 AWS ECR)
  • 我已经打印了/root/.dockercfg 以在我的Jenkinsfile 中调试身份验证

Jenkins 文件:

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()
  }
}

日志:

[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

有什么想法吗?

更新(2017-05-23):
这是 Jira 问题: https://issues.jenkins-ci.org/browse/JENKINS-44143

【问题讨论】:

  • ecr:eu-central-1: 是 AWS 凭据吗?
  • 是的。为了清楚起见,我更新了我的问题。我在 Jenkins 中创建了新的 AWS 凭证并将其命名为 aws-jenkins
  • 我添加了 Jira 问题:issues.jenkins-ci.org/browse/JENKINS-44143

标签: jenkins jenkins-pipeline jenkins-docker amazon-ecr


【解决方案1】:

即使 docker.withRegistry 在启动时执行登录 ECR 并在完成时注销似乎是合乎逻辑的,但它并没有执行。 因此,您必须在执行推送之前安装 awscli 并添加 ECR 登录命令。

sh("eval \$(aws ecr get-login --no-include-email | sed 's|https://||')")

有关详细示例,请参阅http://www.tikalk.com/devops/ecr-in-pipeline/

【讨论】:

    【解决方案2】:

    只需从本地 PC 或云服务器中删除或重命名 $HOME/.docker/config.json 文件。它将解决没有基本身份验证凭据的问题。

    在终端中执行以下步骤:

    mv $HOME/.docker/config.json $HOME/.docker/config.json.backup
    

    【讨论】:

      猜你喜欢
      • 2019-08-05
      • 1970-01-01
      • 2016-04-13
      • 2016-11-12
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多