我想使用 Jenkins Docker 管道插件在 Docker Hub 上拉取具有特定标签的特定私有(private)镜像的新版本。 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 ,但文档甚至没有提到拉取,代码中的示例也没有显示如何登录以拉取私有(private)图像。我可以手动编写脚本,但使用 Docker 管道插件的重点是避免直接编写 Docker 命令脚本。

最佳答案

我相信你在这里需要的是 withRegistry 函数。
它可以如下使用

docker.withRegistry('<registry-url>', '<credential-id>') {
    image = docker.image('user/foo:bar')
    image.pull()
}
withRegistry 块中的所有内容都将使用该注册表和身份验证来拉取镜像。

在这种情况下,<registry-url> 是 Dockerhub 注册表的 URL。我相信 Dockerhub 注册表 URL 是 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 的第二个参数。

以下是添加凭据的页面可能是什么样子的示例。
docker - 强制Jenkins管道作业从Dockerhub中提取新的私有(private)镜像-LMLPHP

关于docker - 强制Jenkins管道作业从Dockerhub中提取新的私有(private)镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48105005/

10-11 04:26