问题描述
我们当前正在使用CircleCI来运行我们的自动化测试,并希望迁移到Azure DevOps以在Azure管道上运行这些测试。我们的应用程序已完全泊坞化,在Azure Pipeline上的容器中执行测试时遇到了麻烦。
我的目标只是构建映像,将其推送到我们的Docker Hub仓库,然后将其拉出以执行PHPUnit。第一部分没问题,我设法推送了图像。
然后,我创建了一个作业来执行一个简单的脚本,并且希望它在容器内运行。我的管道配置文件将跟随。当前失败的步骤是第二个作业的容器初始化。它失败并显示错误:
/ usr / bin / docker pull [已编辑]:azure-master 来自守护程序的错误响应:[已编辑]的拉式访问被拒绝,存储库不存在或可能需要'docker login':拒绝:所请求的对资源的访问被拒绝
trigger:
- master
resources:
- repo: self
stages:
- stage: Build
displayName: Build image
jobs:
- job: Build_and_push
displayName: Build and push image
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Docker@2
displayName: Build and push image
inputs:
containerRegistry: 'Docker Hub'
repository: '[redacted]'
command: 'buildAndPush'
Dockerfile: '**/Dockerfile'
tags: 'azure-$(Build.SourceBranchName)'
- task: Docker@2
displayName: Login to docker repo
inputs:
containerRegistry: 'Docker Hub'
command: 'login'
- job: Install_composer_and_run_tests
dependsOn: ['Build_and_push']
pool:
vmImage: 'ubuntu-latest'
container: [redacted]:azure-$(Build.SourceBranchName)
steps:
- task: Docker@2
displayName: Login to docker repo
inputs:
containerRegistry: 'Docker Hub'
command: 'login'
- script: composer install -n --prefer-dist
- script: php vendor/bin/phpunit tests/ --group me
我不太了解登录方式或登录位置,因为我在工作中使用container
参数,而不是提取图像的任务。另外,即使我没有在该步骤中明确登录,也可以轻松推送图像。最后一件事是,我已经使用我的凭据在Azure DevOps(Docker Hub
)中创建了一个容器注册表,并且可以正常工作。
感谢您的帮助:)
解决方法
请参见Endpoints:
容器可以托管在Docker Hub以外的其他注册表中。若要在Azure容器注册表或其他专用容器注册表上托管映像,请向该专用注册表添加服务连接。然后,您可以在容器规范中引用它:
container:
image: xxx/xxx:tag
endpoint: xxx
根据您的错误消息,您可能需要提供Initialize Containers
步骤的凭据。所以我们应该使用这种格式:
- job: Install_composer_and_run_tests
dependsOn: ['Build_and_push']
pool:
vmImage: 'ubuntu-latest'
container:
image: [redacted]:azure-$(Build.SourceBranchName)
endpoint: 'Docker Hub'
steps:
...