在一个简单的 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 和微服务,并且非常喜欢它。