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

时间:2020-02-10 08:21:25

标签: azure-devops azure-pipelines azure-pipelines-release-pipeline azure-container-registry

我正在尝试从Azure DevOps服务在Azure App Service上部署docker容器。我已将docker映像推送到Azure容器注册表。当我尝试创建版本定义时,我找不到Azure容器注册表的服务连接。我已经为ACR创建了服务连接,但未显示在Azure DevOps门户的列表中。

enter image description here

当我选择“ Azure Container Repository”作为源类型时,服务连接在下拉框中不可见。我正在使用DockerHub作为另一种选择。它在列表中显示服务连接。

我为ACR创建服务连接所遵循的步骤:

  1. 从列表中选择 Docker注册表
  2. 选择 Azure Container Registry 作为注册表类型。从ACR提供了订阅ID和注册表。
  3. 提供了服务连接名称并保存。

更新

我通过提供订阅ID和租户ID来使用托管身份验证为Azure Resource Manager创建服务连接。我正在尝试在Artifact设置中使用此连接。我收到以下错误。

找不到给定服务连接名称的终结点。serviceprincipalid。

enter image description here

从ACR中提取docker镜像失败。 App服务的日志显示拒绝对存储库的请求访问。

服务连接问题已解决,但面临来自App服务的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.

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以看到此api附加的参数为type=azurerm。它仅获取类型为Azure Resource Manager的服务连接。但是容器注册表不属于这个。

因此,最好创建和使用类型为Azure Resource Manager type的服务连接。


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

对于第二个问题,您没有得到太多信息(例如检查股权跟踪)。因此,根据我的了解,我建议您将类型从Managed Identity Authentication更改为Service Principal Authentication。然后按照此doc进行配置。

此方法更安全,可以首先授权。

enter image description here

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

enter image description here

服务主体键

enter image description here


堆栈溢出是一个开放的论坛,不能安全地共享我需要并用于从后端进行调查的一些关键信息(尤其是 Fiddler跟踪)。您最好去here,因为您可以在那里选择Microsoft Only。如果可能,我可以去那个社区,让那个社区的工程师向我展示。这样我就可以继续研究它了。