Как создать образ Docker, а затем использовать встроенный образ для запуска тестов - PullRequest
4 голосов
/ 01 апреля 2019

Я хочу использовать конвейеры Azure для создания образа Docker, а затем запустить тесты внутри встроенного образа с заданием контейнера.

Изображение должно использовать идентификатор сборки в качестве тега (или комбинацию идентификатора сборки, хэша коммита и имени ветви). Если в качестве значения я использую статический тег (например, 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).

Можно ли использовать переменную в имени изображения?

...