Я хочу использовать конвейеры 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)
.
Можно ли использовать переменную в имени изображения?