Azure devops 无法在Azure DevOps(发布管道)中获取Azure容器注册表的服务连接

Azure devops 无法在Azure DevOps(发布管道)中获取Azure容器注册表的服务连接,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,azure-container-registry,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Container Registry,我正在尝试从Azure DevOps服务在Azure应用程序服务上部署docker容器。我已将docker映像推送到Azure容器注册表。当我尝试创建发布定义时,我无法找到Azure容器注册表的服务连接。我已经为ACR创建了服务连接,但它没有显示在Azure DevOps门户的列表中 当我选择“Azure容器存储库”作为源类型时,服务连接在下拉框中不可见。我使用DockerHub作为另一个选项。它正在列表中显示服务连接 我按照以下步骤为ACR创建服务连接: 从列表中选择了Docker注册表 已

我正在尝试从Azure DevOps服务在Azure应用程序服务上部署docker容器。我已将docker映像推送到Azure容器注册表。当我尝试创建发布定义时,我无法找到Azure容器注册表的服务连接。我已经为ACR创建了服务连接,但它没有显示在Azure DevOps门户的列表中

当我选择“Azure容器存储库”作为源类型时,服务连接在下拉框中不可见。我使用DockerHub作为另一个选项。它正在列表中显示服务连接

我按照以下步骤为ACR创建服务连接:

  • 从列表中选择了Docker注册表
  • 已选择Azure容器注册表作为注册表类型。从ACR提供了订阅ID和注册表
  • 提供了服务连接名称并已保存
  • 更新

    我已通过提供订阅id和租户id,使用托管身份验证为Azure资源管理器创建了服务连接。我正在尝试在工件设置中使用此连接。我得到了下面的错误

    无法为给定的服务连接找到名为endpoint.serviceprincipalid的变量。

    无法从ACR中提取docker图像。来自应用程序服务的日志显示存储库的拉取访问被拒绝

    服务连接问题已解决,但面临来自应用程序服务的docker权限问题

    当我选择“Azure容器存储库”作为源类型时 服务连接在下拉框中不可见

    对于第一个问题,这是因为当您选择ACR作为发布源时,我们的系统使用的api如下所示:

    https://dev.azure.com/{org}/{project}/_API/serviceendpoint/endpoints?type=azurerm

    您可以看到此api附带的参数
    type=azurerm
    。它仅获取类型为
    Azure资源管理器的服务连接。但是容器注册表不属于此目录

    因此,您最好创建并使用类型为
    Azure资源管理器类型的服务连接


    找不到的名为endpoint.serviceprincipalid的变量 给定的服务连接

    对于第二个问题,我没有从您那里获得太多信息(例如检查桩跟踪)。因此,根据我已知的情况,我建议您将类型从
    托管身份验证
    更改为
    服务主体身份验证
    。然后按照下面的步骤进行配置

    这样更安全,可以先授权

    服务主体客户端id,它是在Azure应用程序注册中创建应用程序后的应用程序id:

    服务主体密钥



    Stack overflow是一个开放的论坛,无法安全地共享一些关键信息(尤其是Fiddler trace),我需要这些信息并用于从后端进行调查。你最好去,因为你只能在那里选择微软。如果可能的话,我可以去那个社区,让那个社区的工程师给我看。因此,我可以继续深入研究。

    我将重点放在这一点上,并继续讨论您的第二个错误。对于您的第一个错误,这只是因为这里它只获取类型为azurerm的服务连接。您可以按F12,然后单击此图片中显示的刷新按钮吗?接下来,选择您遇到上述错误的服务连接。让我知道您在F12中看到了什么。我检查了我们的源代码,endpoint.serviceprincipalid是在源代码中应用ACR时将添加到标题中的一个。“但是你想知道你那边发生了什么吗?”MerlinLiang MSFT网站继续加载。显示发布设置(工件和暂存)需要时间。请检查我下面的消息,并让我知道服务主体身份验证是否解决了错误。谢谢@Merlin Liang-MSFT。如何在Azure AD中获取服务主体密钥的值?@kumareshbabons,服务主体客户端ID是在Azure应用程序注册中创建的应用程序的应用程序ID。Service principal key是在Azure app Registrations中创建的应用的设置中创建的密钥的值。要确保服务主体密钥与对象ID相同吗?我没有在应用程序服务门户中获得确切的服务主体密钥。@Kumareshbabons,忽略我之前的评论,我想念你的话。查看此项以获取服务主体密钥@Kumareshbabons,我们有一个博客详细描述了这些。您可以查看此博客了解更多信息:-)
    2020-02-10 12:31:11.781 INFO  - Pulling image from Docker hub: 
    kbdockerregis/kbdockerimage:15
    
    2020-02-10 12:31:14.406 ERROR - DockerApiException: Docker API responded with 
    status code=NotFound, response={"message":"pull access denied for 
    kbdockerregis/kbdockerimage, repository does not exist or may require 'docker 
    login': denied: requested access to the resource is denied"}
    
    2020-02-10 12:31:14.408 ERROR - Image pull failed: Verify docker image 
    configuration and credentials (if using private repository)
    
    2020-02-10 12:31:14.412 INFO  - Stoping site kbapp1 because it failed during 
    startup.