天蓝色的詹金斯管道无法推送到注册表

时间:2018-12-20 18:27:29

标签: azure docker jenkins azure-devops jenkins-pipeline

所以我有一个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进行身份验证,而只需通过用户名和密码进行身份验证。

1 个答案:

答案 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,您最好注意一下。希望对您有帮助。