У меня проблема с новым конвейером, который я настраиваю для микросервиса в Azure DevOps, где конвейер не может ссылаться на переменные среды, предоставляемые средой сборки.
У меня есть этап в моем конвейере, который запускает сценарий Powershell, который распечатывает все переменные среды для целей отладки, и это позволяет мне подтвердить, что среда действительно содержит переменные, которые я пытаюсь использовать.
Эти переменные BUILD_DEFINITIONNAME = my-microservice-repo
и BUILD_BUILDNUMBER = 20200519.2
. По сути, я хочу объединить эти две переменные, чтобы создать другую переменную для имени моего контейнера докеров, чтобы у меня была переменная, равная $(BUILD_DEFINITIONNAME):$(BUILD_BUILDNUMBER)
, которая должна расшириться до my-microservice-repo:20200519.2
. Мы будем называть эту переменную imageName
. Я определил его в разделе переменных в моем скрипте .yml как
variables:
- name: imageName
value: $(BUILD_DEFINITIONNAME):$(BUILD_BUILDNUMBER)
Однако, если я попытаюсь использовать эту переменную на своих шагах Docker:
- task: [email protected]
inputs:
dockerFile: Dockerfile
azureSubscriptionEndpoint: 'endpoint'
azureContainerRegistry: 'my container registry'
imageName: $(imageName)
action: 'Build an image'
- task: [email protected]
inputs:
azureSubscriptionEndpoint: 'endpoint'
azureContainerRegistry: 'my container registry'
action: 'Push an image'
imageName: $(imageName)
Затем, когда скрипт запускается, я получаю эту ошибку: ##[error]invalid argument "myazurecontainerregistry.azurecr.io/$(build_definitionname):$(build_buildnumber)" for "-t, --tag" flag: invalid reference format
Итак, очевидно, что он правильно объединяет строки, поскольку я получаю $(build_definitionname):$(build_buildnumber)
, однако они не расширяются, несмотря на то, что они оба существуют в печатных переменных, как я упоминал ранее.
Есть ли что-то особенное, что мне нужно сделать, чтобы разрешить использование переменных среды в моем скрипте? У нас есть другие сценарии конвейера, которые работают нормально, из которых я скопировал этот сценарий yml, но мой отказывается работать, и я не могу понять почему, как и мои коллеги.
Любая помощь будет принята с благодарностью.
Догадаться. Я неправильно назвал переменные, которые хотел использовать.
$(BUILD_BUILDNUMBER)
должно было быть$(Build.BuildNumber)
.Большой! Спасибо, что поделились своим решением здесь, вы можете принять его как ответ, чтобы оно могло помочь другим членам сообщества, которые сталкиваются с такими же проблемами, и мы могли бы заархивировать эту ветку, спасибо. — person Zulukas; 25.05.2020