Azure Devops-具有docker和Azure容器注册表(ACR)的发布管道-标记问题

问题描述 投票:0回答:1

我有一个很奇怪的问题(并且我想很容易解决):)我试图在Azure中使用一个有效的CI / CD管道。为此,我在Azure devops中建立了一个存储库,并创建了构建和发布管道。我正在将Docker映像发布到Azure容器注册表,并且在发布期间,我拉出了该映像(或者至少-我正在尝试,因为它不起作用),并且试图将其发布在Webapp上用于容器。在我的情况下,“应用”是.NET Core 3.1上的SingalR集线器(但我不认为它对我遇到的问题有所帮助)

[如果有人想详细了解我如何配置它-这是我确实使用过的教程:

https://wikiazure.com/devops/azure-devops-automate-your-release-pipeline-to-provision-a-docker-container-to-azure-web-app-for-containers/

教程中存在一些疑问/差异(例如-为什么最初在Docker Hub上配置了教程Web应用程序,而实际上却在使用ACR。为什么要连接到ACR,所以该教程使用Azure资源管理器连接(而不是专用的Docker容器-> ACR连接)以及为什么以后在构建管道中为dockerRegistryServiceConnection设置了一些奇怪的ID(我在这里输入了我的ACR Docker服务连接的地名)

但是整个构建管道正在运行。它将图像发布到ACR。在这一步之前一切都很好。

当我想使用此图像发布Azure WebApp时,问题开始了。问题在于...标记:)它们不匹配。我有自动CI / CD-因此,当我对存储库进行一些更改时,我会看到发布管道正在工作。它正在ACR中创建图像。然后我看到,该发布管道正在运行。一切都是“正确的”-表示看不到任何错误,并且版本为绿色。

但是当我进入应用程序服务和容器设置时,我会从日志中看到:

2020-04-21 18:02:28.321 INFO  - Pulling image: myAcrName.azurecr.io/mobile/signalr:c7aead0c46b66afc4131935efc7e6a51280dfb1a
2020-04-21 18:02:28.761 ERROR - DockerApiException: Docker API responded with status code=NotFound, response={"message":"manifest for myAcrName.azurecr.io/mobile/signalr:c7aead0c46b66afc4131935efc7e6a51280dfb1a not found: manifest unknown: manifest unknown"}

2020-04-21 18:02:28.761 ERROR - Pulling docker image myAcrName.azurecr.io/mobile/signalr:c7aead0c46b66afc4131935efc7e6a51280dfb1a failed:
2020-04-21 18:02:28.762 INFO  - Pulling image from Docker hub: myAcrName.azurecr.io/mobile/signalr:c7aead0c46b66afc4131935efc7e6a51280dfb1a
2020-04-21 18:02:28.867 ERROR - DockerApiException: Docker API responded with status code=InternalServerError, response={"message":"Get https://myAcrName.azurecr.io/v2/mobile/signalr/manifests/c7aead0c46b66afc4131935efc7e6a51280dfb1a: unauthorized: authentication required"}

2020-04-21 18:02:28.870 ERROR - Image pull failed: Verify docker image configuration and credentials (if using private repository)

非常复杂的错误,但根本原因是,他试图使用不存在的标签(即GIT COMMIT标签)获取图像。它假设是通过$(Build.BuildId)(这是我的第一次尝试)或$(Build.BuilNumber)(这是我的第二次尝试)来获取图像]

以下是此管道步骤(部署Azure App Service)的样子:

- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy Azure App Service'
  inputs:
    azureSubscription: mySubcsriptionARM
    appType: webAppContainer
    WebAppName: myProductsignalr
    DockerNamespace: myAcrName.azurecr.io
    DockerRepository: mobile/signalr
    DockerImageTag: '$(Build.BuildNumber)'

当我转到发布管道日志作为“ Deploy Azure App Service”日志时,我看到了

2020-04-21T18:41:01.6012767Z ##[section]Starting: Deploy Azure App Service
2020-04-21T18:41:01.6367124Z ==============================================================================
2020-04-21T18:41:01.6367787Z Task         : Azure App Service deploy
2020-04-21T18:41:01.6368381Z Description  : Deploy to Azure App Service a web, mobile, or API app using Docker, Java, .NET, .NET Core, Node.js, PHP, Python, or Ruby
2020-04-21T18:41:01.6368765Z Version      : 4.163.5
2020-04-21T18:41:01.6369158Z Author       : Microsoft Corporation
2020-04-21T18:41:01.6369603Z Help         : https://aka.ms/azureappservicetroubleshooting
2020-04-21T18:41:01.6369976Z ==============================================================================
2020-04-21T18:41:03.8970184Z Got service connection details for Azure App Service:'myProductsignalr'
2020-04-21T18:41:04.5534864Z Trying to update App Service Configuration settings. Data: {"appCommandLine":null,"linuxFxVersion":"DOCKER|myAcrName.azurecr.io/mobile/signalr:1f283100"}
2020-04-21T18:41:05.5465725Z Updated App Service Configuration settings.
2020-04-21T18:41:05.5495890Z Trying to update App Service Application settings. Data: {"DOCKER_CUSTOM_IMAGE_NAME":"myAcrName.azurecr.io/mobile/signalr:1f283100"}
2020-04-21T18:41:06.2703349Z Updated App Service Application settings and Kudu Application settings.
2020-04-21T18:41:32.4715682Z Updated App Service Application settings and Kudu Application settings.
2020-04-21T18:41:33.4179962Z Successfully updated deployment History at https://myProductsignalr.scm.azurewebsites.net/api/deployments/111587494492765
2020-04-21T18:41:33.5945654Z App Service Application URL: http://myProductsignalr.azurewebsites.net
2020-04-21T18:41:33.6180118Z ##[section]Finishing: Deploy Azure App Service

enter image description here

令我惊讶的是,这表明一切都还不错-距离“ ok”还很远的时候:)

[之后,当我进入容器设置时:a)新代码发布b)制造管道火灾c)释放管道火灾

我这样看:

enter image description here

标签为空。如果我会手动选择一些标签:

enter image description here

并且会选择:“ SAVE”一切正常(SingalR已启动并正常运行)

很明显,我缺少一些东西:/帮我看看是什么;)

对我来说,根本原因是该片段:DockerImageTag: '$(Build.BuildNumber)'应该插入内部版本号(如前所述),并且容器设置中的信息应为:Pulling image: myAcrName.azurecr.io/mobile/signalr:20200421.09(对于BuildNumber 20200421.09),并在其中插入GIT COMMIT作为标记,并最终显示为:Pulling image: myAcrName.azurecr.io/mobile/signalr:c7aead0c46b66afc4131935efc7e6a51280dfb1a为什么o为什么?:)]

azure docker azure-devops azure-pipelines-release-pipeline azure-container-registry
1个回答
0
投票

是。你是对的。您的标签不匹配。

Docker@2任务中,您可以定义标签:

steps:
- task: Docker@2
  displayName: Login to ACR
  inputs:
    command: login
    containerRegistry: devopsmanual-acr

- task: Docker@2
  displayName: Build and Push
  inputs:
    repository: $(imageName)
    command: buildAndPush
    Dockerfile: build-docker-image/SampleAppForDocker/DOCKERFILE
    tags: |
      $(Build.BuildNumber)

- task: Docker@2
  displayName: Logout of ACR
  inputs:
    command: logout
    containerRegistry: devopsmanual-acr

您的定义应该非常类似于此定义。 devopsmanual-acr连接到您的ACR。

ACR connection definition

我最近为在Azure DevOps上创建docker映像而发疯a blog post,所以也许这对您也有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.