Монтировать репо в образ docker при запуске yaml-pipeline в Azure DevOps - PullRequest
1 голос
/ 26 мая 2020

Я запускаю изображение docker в Azure Devops yaml-pipeline с использованием шага контейнера . Однако у меня проблемы с установкой содержимого репозитория, чтобы он был доступен изнутри образа docker.

Файл Azure Devops pipeline.yml выглядит следующим образом:

container:
  image: 'image-name'
  endpoint: 'foo'
  options: '-v $(Build.SourcesDirectory):/testing'

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script inside docker image'

Это не срабатывает с сообщением об ошибке:

Error response from daemon: create $(Build.SourcesDirectory): "$(Build.SourcesDirectory)" includes 
invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed. If you intended 
to pass a host directory, use absolute path

Я также попытался заменить $(..)$ с $[..] (см. здесь , но это приводит к той же ошибке. Также с ${{..}} конвейер даже не запускается (ошибка: «Выражение шаблона не разрешено в этом контексте» в пользовательском интерфейсе )

Если я удалю options, скрипт запустится, но репо не будет смонтировано.

Для конвейеров, отличных от yaml, вопрос был рассмотрен здесь .

Есть идеи, как выполнить sh это? Или мне нужно создать новый docker образ, куда были добавлены файлы репо: ed?

1 Ответ

0 голосов
/ 27 мая 2020

Есть идеи, как выполнить sh это? Или мне нужно создать новое изображение docker, куда были добавлены файлы репо: ed?

При указании Container напрямую с использованием схемы Yaml, служба Azure DevOps вызовет дополнительная задача Initialize containers автоматически перед задачей checkout source repo и вашими реальными задачами.

container:
  image: 'image-name'

steps:
- script: echo Hello, world!
  displayName: 'Run a one-line script inside docker image'

enter image description here

Во время задачи Initialize containers предопределенные переменные например Agent.BuildDirectory, Build.Repository.LocalPath и Build.SourcesDirectory не раскрываются (неопределенные переменные).

Таким образом, вы не можете использовать Build.SourcesDirectory таким образом, потому что значение этой переменной расширяется после задачи Initialize containers.

1. О том, почему ссылка , которой вы поделились выше, может работать: она в docker задача / шаг , чтобы он мог распознать переменную $(Build.SourcesDirectory). (Реальные задачи сборки запускаются после , переменные сборки определены)

2. Если вы используете указанный c агент, размещенный на сервере Micorosft , вы можете попробовать жестко запрограммировать путь. Вы можете проверить эту аналогичную проблему .

Обычно для агента, размещенного на windows: $(Build.SourcesDirectory) => D:\a\1\s

Для агента, размещенного в Ubuntu: $(Build.SourcesDirectory) => /home/vsts/work/1/s.

...