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

4

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

enter image description here

当我选择“Azure容器仓库”作为源类型时,服务连接在下拉框中不可见。我使用DockerHub作为另一个选项。它在列表中显示服务连接。
我遵循的步骤来创建ACR的服务连接:
  1. 从列表中选择Docker Registry
  2. 选择Azure Container Registry作为注册表类型。提供订阅ID和来自ACR的注册表。
  3. 提供服务连接名称并保存。

更新

我已经使用托管标识身份验证为Azure资源管理器创建了服务连接,提供了订阅ID和租户ID。我正在尝试在Artifact设置中使用此连接。我收到以下错误信息。 找不到名称为endpoint.serviceprincipalid的变量,适用于给定的服务连接。

enter image description here

无法从ACR拉取docker镜像。应用服务的日志显示拒绝访问仓库。

服务连接问题已解决,但从应用服务面临docker权限问题

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.

我正在关注这个问题,继续处理你的第二个错误。至于你的第一个错误,那只是因为这里只获取了类型为azurerm的服务连接。 - Mengdi Liang
你能按F12键,然后点击这张图片中显示的刷新按钮吗?https://imgur.com/a/mFj7UMZ 接下来,选择你遇到错误的服务连接。让我知道你从F12看到了什么。 - Mengdi Liang
我检查了我们的源代码,endpoint.serviceprincipalid是在应用ACR时添加到标头中的内容。但是想知道你们那边发生了什么。 - Mengdi Liang
@MerlinLiang-MSFT 网站一直在加载中。显示发布设置(工件和分段)需要一些时间。 - Kumaresh Babu N S
1
请查看下面的消息,让我知道是否通过“服务主体身份验证”解决了错误。 - Mengdi Liang
1个回答

2
当我选择“Azure容器仓库”作为源类型时,服务连接在下拉框中不可见。
对于这个问题,是因为当您选择ACR作为发布源时,我们系统使用的API如下所示:

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

您可以看到此 API 附加的参数是 type=azurerm。它仅获取了服务连接,其类型为 Azure Resource Manager。但是容器注册表不属于这个范畴。
因此,最好创建并使用一个类型为 Azure Resource Manager 的服务连接。
给定的服务连接中找不到名为endpoint.serviceprincipalid的变量。
对于这个第二个问题,我从你那里没有得到太多信息(比如检查堆栈跟踪)。所以基于我的了解,我建议您将类型从“托管标识验证”更改为“服务主体验证”。然后按照这个doc 配置它。
这样更安全,可以首先进行授权。

enter image description here

“Service Principal客户端ID”,是在您在Azure应用程序注册中创建应用程序后的应用程序ID:”

enter image description here

服务主体密钥:

enter image description here


Stack Overflow 是一个开放的论坛,不安全,不能分享一些关键信息(尤其是 Fiddler 跟踪信息),我需要这些信息来从后端进行调查。你最好去 这里,因为你可以在那里选择仅限于 Microsoft。如果可能的话,我可以去那个社区,让那个社区的工程师向我展示它。这样我就可以继续深入研究了。

1
@KumareshBabuNS,“服务主体客户端ID”是在Azure应用程序注册中创建的应用程序的应用程序ID。 “服务主体密钥”是在Azure应用程序注册中创建的应用程序的“设置”中创建的密钥值。 - Mengdi Liang
@KumareshBabuNS,请忽略我之前的评论,我错过了你的话。查看此链接以获取服务主体密钥。https://imgur.com/a/7W3wdJ5 - Mengdi Liang
1
@KumareshBabuNS,我们有一篇非常详细描述这些内容的博客。您可以查看此博客以获取更多信息:-) https://www.azuredevopslabs.com/labs/devopsserver/azureserviceprincipal/ - Mengdi Liang
@KumareshBabuNS,没关系。我明白了,因为我第一次遇到Azure时也遇到了与你同样的麻烦:-) 那么现在发布配置对你来说成功了吗? - Mengdi Liang
SPN并不比托管身份更安全。 - pabrams
显示剩余14条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接