当前位置: 首页 > 知识库问答 >
问题:

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

景恩
2023-03-14

我有一个非常奇怪(我想很容易解决)的问题:)我试图在Azure中有一个工作的CI/CD管道。为此,我在Azure devops中创建了一个存储库,并创建了构建和发布管道。我将docker图像发布到Azure容器注册表,在发布期间,我将拉出这个图像(或者至少--我正在尝试,因为它不起作用),并试图将它发布到Webapp for Containers上。在我的例子中,“应用程序”是。NET Core3.1上的SingalR hub(但我不认为它对我遇到的问题有什么影响)

如果有人想详细了解我是如何配置它的--以下是我使用的教程:

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

教程中有一些疑问/不同之处(例如,为什么最初在教程中web应用程序是在Docker hub上配置的,而实际上它使用的是ACR。为什么要连接到ACR教程使用Azure Resource Manager连接(而不是专用的Docker容器-->ACR connetion),为什么后来在构建管道中有一些奇怪的dockerRegistryServiceConnection id设置(我在这里给出了我的ACR Docker服务连接的地名)

但整个构建管道正在工作。它正在将映像发布到ACR。直到这一步,一切都很好。

当我想用这个图像发布Azure WebApp时,问题就开始了。问题出在...标签上:)它们不匹配。我有自动CI/CD--所以当我把一些更改推到repo时,我看到发布管道正在工作。它正在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提交标记。它假设按$(build.buildid)(这是我第一次尝试)或按$(build.builnumber)(这是我第二次尝试)获取图像

下面是这个管道步骤(部署Azure App服务)的样子:

- 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)'
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

我是这样看的:

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

并选择:“保存”一切正常(SingalR已启动并正确运行)

# Docker
# Build a Docker image 
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker

trigger:
- master

resources:
- repo: self

variables:
  dockerRegistryServiceConnection: 'MyProductDockerACR'
  imageRepository: 'mobile/signalr'
  containerRegistry: 'myAcrName.azurecr.io'
  dockerfilePath: '**/Dockerfile'
  tag: '$(Build.BuildNumber)'
  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:  
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push image to container registry
      inputs:
        containerRegistry: $(dockerRegistryServiceConnection)
        repository:  $(imageRepository)
        command: 'buildAndPush'
        Dockerfile: $(dockerfilePath)
        tags: |
          $(tag)

共有1个答案

史意致
2023-03-14

我看到您正在使用的版本是由UI配置的。它的工作逻辑与YAML配置的逻辑有很大不同。

实际上,这里您所收到的只是不同的性能产生,而发布的运行原因是不同的。

我想这个版本有针对回购的工件源,对吗?你可以通过检查它的图标来确认。

 类似资料:
  • 我正在尝试从Azure运营模式服务在Azure应用服务上部署docker容器。我已将docker映像推送到Azure容器注册表。当我尝试创建发布定义时,我找不到Azure容器注册表的服务连接。我已经为ACR创建了服务连接,但它没有显示在Azure运营模式门户的列表中。 当我选择“Azure 容器存储库”作为源类型时,服务连接在下拉框中不可见。我正在使用多克枢纽作为另一种选择。它在列表中显示服务连接

  • 我有一个azure构建管道和发布管道。我在发布构建工件中面临问题。在构建管道中,发布构建工件被正确地创建在默认的“drop”目录中。 当我在发布管道中下载该工件时,发布文件正在服务抛出错误的中下载 您没有查看此目录或页面的权限。 这意味着我的发布工件没有在“home/wwwroot”目录中下载。 构建管道 释放管道 我错过了什么?

  • 我在Azure DevOps中有一个发布管道。这是从ACR中提取docker映像并发布到Web应用程序(linux容器)。所有工作都很好(容器按预期发布和运行),但是我似乎不能在运行时向容器传递任何自定义环境变量。 释放管道 在管道“Deploy Azure App Service”中的变量选项卡下,我添加了,然后在“App Settings”下添加了 有人知道如何在运行时通过Azure DevO

  • 我制作了一个JHipster应用程序,我想添加一个带有私有Gitlab runner的CI/CD,以便部署在私有Docker注册表上。我得到了这样的失败: 这是我演讲的相关部分。gitlab ci。yml 编辑:有一个未配置的变量。现在我得到了 如何告诉运行程序接受不安全的(明文)连接?

  • 我正在尝试在Azure DevOps(内部部署)中配置发布管道以支持git流策略。我正在努力实现的目标: promise“发布/*”触发软件的构建并发布到QA的位置 promise“主控”从步骤1获取相同的软件构建(工件),并发布到生产位置 因此,当我做一个git-flow开始发布时,软件可用于测试/质量保证,当我完成发布时,它可供用户使用。 我的构建管道工作正常,它由发布分支触发,并以发布工件任

  • 问题内容: 我创建了两个Docker容器。第一个提供专用的Docker注册表,第二个提供官方Docker注册表的镜像: 现在,我想将两者结合起来。每当用户 提取 图像时,都应首先查询私有注册表,然后查询镜像。当图像被 推送时, 它们仅应被推送到私有注册表。 我不知道如何做到这一点。任何帮助表示赞赏。 问题答案: 您不能仅仅强制所有 docker push 命令推送到您的私有注册表。原因之一是您可以