我正在尝试从Azure DevOps服务在Azure App Service上部署docker容器。我已将docker映像推送到Azure容器注册表。当我尝试创建版本定义时,我找不到Azure容器注册表的服务连接。我已经为ACR创建了服务连接,但未显示在Azure DevOps门户的列表中。
当我选择“ Azure Container Repository”作为源类型时,服务连接在下拉框中不可见。我正在使用DockerHub作为另一种选择。它在列表中显示服务连接。
我为ACR创建服务连接所遵循的步骤:
更新
我通过提供订阅ID和租户ID来使用托管身份验证为Azure Resource Manager创建服务连接。我正在尝试在Artifact设置中使用此连接。我收到以下错误。
找不到给定服务连接名称的终结点。serviceprincipalid。
从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.
答案 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进行配置。
此方法更安全,可以首先授权。
服务主体客户端ID ,它是在Azure应用注册中创建应用后的应用ID:
服务主体键:
堆栈溢出是一个开放的论坛,不能安全地共享我需要并用于从后端进行调查的一些关键信息(尤其是 Fiddler跟踪)。您最好去here,因为您可以在那里选择Microsoft Only。如果可能,我可以去那个社区,让那个社区的工程师向我展示。这样我就可以继续研究它了。