Как изменить структуру папки агента среды Azure DevOps
Чтобы добиться непрерывного развертывания, мы использовали (классический) конвейер выпуска в Azure DevOps для развертывания веб-службы на виртуальной машине в нашей интрасети. Чтобы воспользоваться конвейером развертывания yaml, я заменил наш бывший агент пула развертывания на этой виртуальной машине агентом среды.
Для фактического развертывания мы используем задачу IIS Web App Deploy . Исходный каталог для этих задач по умолчанию:
$(System.DefaultWorkingDirectory)\**\*.zip
. Переводится в подкаталог конкретного релиза.
К сожалению для меня, агент среды загружает артефакт рядом с -folder, а не в нее, как агент пула среды. Таким образом, настройки задачи развертывания по умолчанию не могут ее найти. Я знаю, что могу легко обойти эту проблему, используя
$(System.DefaultWorkingDirectory)\..\**\*.zip
. Мне просто интересно, почему Microsoft ввела такой удар по скорости разработки в агенты среды.
Могу ли я каким-либо образом заставить агента среды загрузить артефакт в
$(System.DefaultWorkingDirectory)
он же
a
а не рядом?
2 ответа
Если вы используете задание развертывания в конвейере yaml. Артефакты будут автоматически загружены в
$(Pipeline.Workspace)/
(папка рядом с ) в заданиях развертывания. См. ниже выдержку отсюда :
Артефакты из текущего конвейера загружаются в $(Pipeline.Workspace)/.
Артефакты из связанного ресурса конвейера загружаются в $(Pipeline.Workspace)/{идентификатор ресурса конвейера}/.
Все доступные артефакты из текущего конвейера и из связанных ресурсов конвейера автоматически загружаются в заданиях развертывания и становятся доступными для вашего развертывания. Чтобы предотвратить загрузку, укажите download: none.
Чтобы агент среды загрузил артефакт в $(System.DefaultWorkingDirectory).
Вы можете указать
download: none
. И используйте задачу Download Pipeline Artifacts и укажите
path
параметр для загрузки ваших артефактов в
$(System.DefaultWorkingDirectory)
. Смотри ниже:
- deployment:
environment: Dev
strategy:
runOnce:
deploy:
steps:
- download: none #prevent automatically download
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'current'
targetPath: '$(System.DefaultWorkingDirectory)' # download to default folder.
Другой обходной путь - изменить исходный каталог для
IIS Web App Deploy task
по умолчанию
$(Pipeline.Workspace)\**\*.zip
При переходе с классического конвейера на YAML для развертывания вам, вероятно, потребуется изменить
$(System.DefaultWorkingDirectory)
к
$(Pipeline.Workspace)
. Вы можете убедиться в этом, выполнив следующие шаги:
- pwsh: Get-ChildItem $(System.DefaultWorkingDirectory) -Recurse
displayName: Check System.DefaultWorkingDirectory
- pwsh: Get-ChildItem $(Pipeline.Workspace) -Recurse
displayName: Check Pipeline.Workspace
(Да, это ужасно многословный способ сделать это. Тем не менее, он даст вам более полное представление о файловой структуре, поддерживающей вашу работу.)