如何在Jenkins管道中添加多个存储库

时间:2019-07-23 15:01:57

标签: jenkins jenkins-pipeline

我有一个Jenkins管道,我需要在其中登录两个不同的docker存储库。我知道如何使用以下命令对一个仓库进行身份验证

docker.withRegistry('https://registry.example.com', 'credentials-id')

但是不知道如何执行超过1个回购?

2 个答案:

答案 0 :(得分:1)

这是部分答案,仅在使用两个注册表时才适用,但仅在一个注册表上需要凭据。您可以嵌套调用,因为它们大多只是执行docker登录,该登录在关闭范围内保持活动状态,并将注册表域名添加到docker push等中。

在脚本化的Jenkins管道中或声明性Jenkins管道的脚本{}部分中使用它:

docker.withRegistry('https://registry.example1.com') { // no credentials here
    docker.withRegistry('https://registry.example2.com', 'credentials-id') { // credentials needed
        def container = docker.build('myImage')
        container.inside() {
            sh "ls -al" // example to run on the newly built 
        }
    }
}

有时您可以使用两个非嵌套的调用docker.withRegistry()一个接一个地调用,但是构建是一个示例,例如,当您无法满足Dockerfile中第一个FROM的基本映像的需要时一个注册表,第二个FROM的基本映像在另一个注册表中。

答案 1 :(得分:1)

嵌套docker.withRegistry调用实际上可以按预期工作。每次通话都会使用提供的凭据向/home/jenkins/.dockercfg添加一个条目。

// Empty registry ('') means default Docker Hub `https://index.docker.io/v1/`
docker.withRegistry('', 'dockerhub-credentials-id') {
  docker.withRegistry('https://private-registry.example.com', 'private-credentials-id') {
    // your build steps ...
  }
}

这允许您使用提供的凭据从Docker Hub提取基础映像,以避免最近引入的提取限制,并将结果推送到另一个Docker注册表中。