所以我有一个docker注册表(azure容器注册表),该注册表已启用管理模式并定义了密码。
因此,基本上我的构建器控制台说以下内容:
Successfully tagged croc-hunter:latest
[Pipeline] sh
+ docker tag croc-hunter reponame.azurecr.io/croc-hunter:master-862fa81
[Pipeline] sh
+ docker push reponame.azurecr.io/croc-hunter:master-862fa81
The push refers to repository [reponame.azurecr.io/croc-hunter]
d99341ecd82c: Preparing
99e8e786d815: Preparing
7790d1ef8abe: Waiting
3a3beb3675ab: Waiting
99e8e786d815: Retrying in 5 seconds
d99341ecd82c: Retrying in 5 seconds
8c11d1b2af3f: Retrying in 5 seconds
unknown: The operation is disallowed.
在这里我登录到docker注册表:
withCredentials([[$class : 'UsernamePasswordMultiBinding', credentialsId: config.container_repo.jenkins_creds_id,
usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
sh "docker login -u ${env.USERNAME} -p ${env.PASSWORD} ${config.container_repo.host}"
}
詹金斯说一切都很好:
+ docker login -u **** -p **** ****.azurecr.io
Login Succeeded
我什至可以创建一个服务原理,并通过ENV vars将其挂接到jenkins脚本中,并在docker登录之前执行它:
container('az') {
withCredentials([azureServicePrincipal(credentialsId: config.container_repo.azure_creds_id,
subscriptionIdVariable: 'SUBS_ID',
clientIdVariable: 'CLIENT_ID',
clientSecretVariable: 'CLIENT_SECRET',
tenantIdVariable: 'TENANT_ID')]) {
sh 'az login --service-principal -u $CLIENT_ID -p $CLIENT_SECRET -t $TENANT_ID'
}
}
这会导致在控制台中出现,因此一切正常:
[
{
"cloudName": "AzureCloud",
"id": "****",
"isDefault": true,
"name": "XXX Azure",
"state": "Enabled",
"tenantId": "****",
"user": {
"name": "****",
"type": "servicePrincipal"
}
}
]
但是,这会导致相同的重试错误。
这是什么问题?!请注意,我无法通过登录docker login -u -p -
从计算机推送到注册表。在x秒内进行相同的重试,然后不允许。
有人可以帮我调试这个吗?理想情况下,我希望我的注册表不需要通过az cli进行身份验证,而只需通过用户名和密码进行身份验证。
答案 0 :(得分:1)
如果在您提供错误时显示ACR的“可用SKU:0.0GiB”。这意味着没有存储空间供您推送图像。因此,您需要为ACR提供更多存储空间。查看有关the limits of container image and storage for ACR的信息。
您可以将具有所需最大存储容量的ACR SKU更改为:
az acr update --name myregistry --sku Premium
更多详细信息和一些限制here,您最好注意一下。希望对您有帮助。