强制Jenkins管道作业从Dockerhub中提取新的私有映像

时间:2018-01-04 23:19:57

标签: docker jenkins jenkins-pipeline

我想使用Jenkins Docker管道插件在Docker Hub上提取具有特定标记的特定私有映像的新版本。 Docker shell命令看起来像:

docker login -u user -p password
docker pull user/foo:bar

这样的事情似乎应该有效:

node () {
    image = docker.image('user/foo:bar')
    image.pull()
    image.inside {
        // Commands to run in the container

但是没有办法执行登录步骤,所以我总是得到错误:

Error response from daemon: pull access denied for user/foo, repository does not exist or may require 'docker login'.

我已经浏览了documentationcode,但文档甚至没有提及拉动,代码中的示例也没有显示如何登录以拉出私有图像。我可以手动编写脚本,但使用Docker管道插件的全部目的是避免直接编写Docker命令脚本。

1 个答案:

答案 0 :(得分:6)

我相信你需要的是withRegistry功能。 它可以如下使用

docker.withRegistry('<registry-url>', '<credential-id>') {
    image = docker.image('user/foo:bar')
    image.pull()
}

withRegistry块中的所有内容都将使用该注册表和身份验证来提取图像。

这种情况下<registry-url>是Dockerhub注册表的URL。我相信Dockerhub注册网址为https://registry.hub.docker.com

<credential-id>是存储在Jenkins中的Dockerhub凭证的ID。

要添加这些凭据,请从Jenkins索引页面导航到Credentials -> System -> Global credentials -> Add Credentials

在此页面上,您需要选择Kind作为Username with password。 范围应为Globalusernamepassword字段是Dockerhub的用户名和密码。

ID字段是您希望成为<credential-id>的任何文字。例如,如果您将ID字段docker-hub-credentials设为需要withRegistry的第二个参数。

以下是添加凭据的页面的示例。 enter image description here