如何构建Docker映像然后使用构建的映像来运行测试

时间:2019-04-01 10:03:42

标签: azure-devops azure-pipelines azure-pipelines-build-task

我想使用Azure Pipelines生成Docker映像,然后使用容器作业在生成的映像中运行测试。

图像应使用构建ID作为标记(或构建ID,提交哈希和分支名称的组合)。如果我使用静态标记作为值(例如build),则并行运行两个两个管道可能会导致不必要的竞争情况。

构建步骤非常简单-登录,构建并推送到Docker Hub。

但是,当指定要使用容器的测试作业时,我无法使用变量。

这是一个可行的示例,但它不使用私有注册表。

variables:
  - group: dockerCredentials
    # contains: dockerUsername, dockerPassword
  - name: imageName
    value: azure-pipelines-test
  - name: dockerRegistry
    value: krsb
  - name: fullImageName
    value:

jobs:
- job: build
  pool:
    vmImage: 'Ubuntu-16.04'
  steps:
  - script: |
      docker login -u $(dockerUsername) -p $(dockerPassword)
      docker build -t '$(dockerRegistry)/$(imageName):$(build.buildId)' .
      docker push '$(dockerRegistry)/$(imageName):$(build.buildId)'
    displayName: 'docker build'

- job: test
  dependsOn:
  - build
  pool:
    vmImage: ubuntu-16.04
  container:
    image: $[ format('{0}/{1}:{2}', variables['dockerRegistry'], variables['imageName'], variables['build.buildId']) ]
    endpoint: docker-hub-registry
  steps:
  - script: printenv

如果我想使用私有注册表,则不将容器指定为字符串,而是使用以下语法(在端点¹中指定了Docker集线器凭据):

# ...
  container:
    image: image-name:tag
    endpoint: docker-hub-registry

使用这种语法时,无法使用$[ variables['name'] ]语法,该语法不会展开,并且在管道运行时会输出错误:

##[command]/usr/bin/docker pull $[ format('{0}:{1}', variables['imageName'], variables['build.buildId']) ]
"docker pull" requires exactly 1 argument.

如果我使用$(imageName):$(build.buildId),情况也会一样。

是否可以在图像名称中使用变量?

0 个答案:

没有答案