Azure Devops - задача PowerShell на собственном агенте

У меня есть настройка конвейера развертывания Azure Devops, и я могу без проблем развернуть ее на собственной виртуальной машине.

У меня есть следующий сценарий PowerShell, который правильно очищает мой целевой каталог, оставляя 2 папки, которые не являются частью системы управления версиями

Get-ChildItem -Path  'C:\inetpub\wwwroot\testDeploy\' -Recurse -exclude "pod","photos" |
Select -ExpandProperty FullName |
Where {$_ -notlike  '*\pod\*' -and $_ -notlike '*\photos\*'} |
sort length -Descending |
Remove-Item -force 

Я попытался добавить задачу «Сценарий PowerShell», но я не знаю, как поместить сценарий PowerShell в папку, к которой эта задача может получить доступ, то есть $ (System.DefaultWorkingDirectory). Может ли кто-нибудь посоветовать, как я должен либо генерировать файл, либо где его хранить в моем репо, которое затем доступно для самостоятельного агента Windows


comment
Вы хотите получить доступ к предварительно определенным переменным в вашем сценарии PowerShell?   -  person Shayki Abramczyk    schedule 24.06.2019
comment
Нет, сценарий может работать изолированно. Я должен был добавить, что у меня процесс работает, добавляя встроенный скрипт, но я хотел понять, как его можно поддерживать в репо вместо этого.   -  person Pixelstiltskin    schedule 24.06.2019
comment
Вы можете создать папку сценариев PowerShell и поместить туда сценарий.   -  person Shayki Abramczyk    schedule 24.06.2019
comment
Не могли бы вы сейчас сохранить свой скрипт в репозиториях и получить к нему доступ самоагенту?   -  person Merlin Liang - MSFT    schedule 27.06.2019
comment
@ShaykiAbramczyk - Я попытался добавить скрипт в корень моего репо, но при вводе пути как ClearDirectories.ps1 возникает следующая ошибка: ## [error] Неверный путь к файлу 'C: \ azagent \ A1_work \ r1 \ а \ ClearDirectories.ps1 '. Укажите путь к файлу .ps1.   -  person Pixelstiltskin    schedule 28.06.2019
comment
Это сообщение об ошибке вызвано неверным путем к сценарию. Путь к файлу .ps1 должен быть xxx_work \ 3 \ s \ xxx.ps1, а не под файлом.   -  person Merlin Liang - MSFT    schedule 01.07.2019
comment
Как дела? Может ли ответ вам помочь?   -  person Merlin Liang - MSFT    schedule 16.07.2019


Ответы (1)


Согласитесь с Shayki, вы можете создать файл powershell (.ps1) в репозиториях и вставить в него свой скрипт для достижения этой цели. А затем используйте задачу PowerShell для выполнения скрипта, который находится в файле ps1.

Но, как вы сказали, вы хотите, чтобы он легко поддерживался в репозиториях. Необходимо внести некоторые изменения в ваш сценарий:

Param(
    [string]$RootPath,
    [string]$File1,
    [string]$File2,
    [string]$NonLike1,
    [string]$NonLike2
)

Get-ChildItem -Path  $RootPath -Recurse -include $File1,$File2 |
Select -ExpandProperty FullName |
Where {$_ -notlike  $NonLike1 -and $_ -notlike $NonLike2} |
sort length -Descending |
Remove-Item -Recurse -force

Первое изменение: вам нужно заменить жесткий код на переменную. Передайте значение с помощью задачи, это хороший способ сохранить ваш скрипт.

Второе, что также является важным изменением, - это добавить -Recurse после Remove-Item, иначе вы получите ошибку, показанную ниже, в то время как значение $ RootPath является жестким кодом, например 'C: \ Users \'.

Remove-Item: Windows PowerShell находится в неинтерактивном режиме. Функции чтения и подсказки недоступны.

А затем вы можете добавить задачу в свой конвейер сборки. Добавьте Script path, где находится файл .ps1, и введите аргументы со значением:

введите здесь описание изображения

Если вы хотите получить доступ к $(System.DefaultWorkingDirectory), передайте его $RootPath.

Надеюсь, мой образец поможет вам добиться желаемого.

person Merlin Liang - MSFT    schedule 25.06.2019