使用Jenkins将Docker Repository推送到Dockerhub

时间:2016-01-14 17:02:31

标签: plugins jenkins docker dockerhub

我们想将docker存储库推送到DockerHub - 从shell开始工作。但在Jenkins中,我们收到错误消息"errorDetail":{"message":"unauthorized: access to the requested resource is not authorized"

我认为问题是在shell(docker login)中我必须插入电子邮件地址,登录名和密码。在Jenkins我只能设置登录名和密码NO email。 凭证插件的版本是1.24,我们使用docker-build-step作为docker步骤。

THX

2 个答案:

答案 0 :(得分:1)

您可以试试CloudBees Docker Build and Publish plugin吗?

此插件允许创建构建步骤以构建Dockerfile并将图像发布到注册表(DockerHub或私有注册表):

enter image description here

另一种解决方案是使用jenkins用户+使用相关凭据登录DockerHub,在Jenkins机器上打开会话?

使用此解决方案,DockerHub凭据将被缓存,Jenkins应该能够将您的图像推送到DockerHub注册表。

答案 1 :(得分:1)

也许您可以使用Docker pipeline plugin(它在推荐的插件中)。

Jenkinsfile示例:

node {

  checkout scm
  def dockerImage

  stage('Build image') {
    dockerImage = docker.build("username/repository:tag")
  }

  stage('Push image') {
    dockerImage.push()
  }   

}

以这种方式进行操作,您必须在管道模型定义中指定Docker注册表的凭据。

Docker管道插件在将“管道模型定义”中分配的凭据应用于具有多分支管道的项目时遇到问题。也就是说,如果使用上面的代码,您将继续收到错误:

  

拒绝:请求的对资源的访问被拒绝

然后,您必须在Jenkins文件中指定凭据,如下所示:

node {

  checkout scm
  def dockerImage

  stage('Build image') {
    dockerImage = docker.build("username/repository:tag")
  }

  stage('Push image') {
    docker.withRegistry('https://registry-1.docker.io/v2/', 'docker-hub-credentials') {
      dockerImage.push()
    }
  }

}

如果需要,可以修改自定义注册表的URL