如何使用 'withCredential' 从 Jenkins 管道登录到 docker azure 注册表,返回 TTY 错误



在一个简单的 jenkinsfile 中,如下所示:

pipeline {
agent {
label 'my-agent'
}
stages {
stage ('Docker version') {
steps {
sh 'docker --version'
}
}
stage ('Docker Login Test') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'mycredentials', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASSWORD')]) {
echo "docker login naked"
sh "docker login myAzureRepo.azurecr.io -u admin -p 1234"
echo "docker login protected"
sh "docker login myAzureRepo.azurecr.io -u $DOCKER_USER -p $DOCKER_PASSWORD" 
}
}
}
}
}

使用裸凭据时,我成功登录,甚至尝试推送图像,并且工作正常。

但是当我从凭据存储中获取密码时,我从 jenkins 收到以下错误。

docker 登录 myAzureRepo.azurecr.io -u ****错误:无法从非 TTY 设备执行交互式登录

在尝试了许多不同的方法之后,一种方法奏效了。必须提供用户名,只能将密码作为变量传递。

所以而不是

sh "docker login myAzureRepo.azurecr.io -u $DOCKER_USER -p $DOCKER_PASSWORD"

我用了

sh "docker login myAzureRepo.azurecr.io -u admin -p $DOCKER_PASSWORD"

并且工作正常。至少密码是隐藏的。

示例中的注册表是一个由我制作的注册表,我正在处理的注册表具有不同的名称和凭据。

但如果你知道更好的方法,请传播爱。我刚刚开始使用 Jenkins、docker 和微服务,并且非常喜欢它。

最新更新