我有一个Jenkins管道,我需要在其中登录两个不同的docker存储库。我知道如何使用以下命令对一个仓库进行身份验证
docker.withRegistry('https://registry.example.com', 'credentials-id')
但是不知道如何执行超过1个回购?
答案 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注册表中。