Я создал расширение задачи Wait Azure DevOps для сборки / выпуска некоторое время назад, и недавно он начал сообщать следующее предупреждение при запуске:
[warning] Task 'Wait '(1.2.3) использует устаревший обработчик выполнения задач. Задача должна использовать поддерживаемую библиотеку задач: https://aka.ms/tasklib
Итак, перейдя по этой ссылке на Azure Pipelines Task SDK GitHub repo , а затем развернув в Consumingссылка PowerShell API SDK похоже, мне нужно обновить свое расширение от старого обработчика выполнения PowerShell
до нового обработчика выполнения PowerShell3
в моем файле task.json
, поэтому я внес это изменение, и код теперь выглядитнапример:
"execution": {
"PowerShell3": {
"target": "$(currentDirectory)/Code/Wait.ps1",
"workingDirectory": "$(currentDirectory)"
}
}
Следуя инструкциям на странице, я сделал Save-Module -Name VstsTaskSdk -Path .\
, чтобы загрузить модуль SDK и зафиксировал его в каталоге ps_modules\VstsTaskSdk
в корне задачи моего расширения.
Однако после сборки и запуска расширения на агенте MS Hosted он выдает ошибку:
[error] Файл не найден: 'D: \ a_tasks \ Wait_f3e9b3d7-a528-5245-91c7-453406bcb038 \ 1.2.17 \ Code \ ps_modules \ VstsTaskSdk \ VstsTaskSdk.psd1 '
Я заметил, что это выглядитдля каталога ps_modules
в каталоге Code
, поэтому я попыталсяпоместив его туда в моем репозитории git, но это все равно приводит к той же ошибке.
Я нашел этот очень похожий вопрос StackOverflow , но решение для них состояло в том, чтобы удалить каталог версии из ихИерархия ps_modules\[version]\VstsTaskSdk
, которой у меня уже нет.
Я также нашел этот пост, проходящий через процесс , и, похоже, я все сделал правильно, но явсе равно получаю ошибку.
Вот как выглядит моя файловая иерархия:
|-- Wait\ <task root>
|-- Code\
|-- Convert-Unit.Tests.ps1
|-- Convert-Unit.psm1
|-- Wait.ps1
|-- ps_modules\
|-- VstsTaskSdk\
|-- [All the module files, including VstsTaskSdk.psd1]
|-- icon.png
|-- task.json
Я думал, что проблема может заключаться в том, что я держу свои задачи "код бизнес-логики" отдельно от "код инфраструктуры задач ", поместив его в каталог Code
;то есть мой файл task.json
и файл целевой точки входа Wait.ps1
не находятся в одном каталоге. Исходя из этого предположения, я удалил каталог Code
и сбросил все файлы в корневом каталоге, и ошибка исчезла (сейчас я получаю разные ошибки, но похоже, что эта проблема уже решена).
Есть какие-нибудь мысли о том, что я могу сделать, чтобы при переносе на новый обработчик выполнения PowerShell мой «код бизнес-логики» был отделен от «кода инфраструктуры задач»? Я не уверен, как он определяет, где он должен искать каталог ps_modules
.
Код также полностью с открытым исходным кодом, поэтому не стесняйтесь посмотреть репозиторий .
Обновление
Хотя мне не удалось решить проблему с тем, как разместить файлы сценариев PowerShell task.json
и целевой точки входа в отдельных каталогах, я смог внести изменения, чтобы всекод инфраструктуры расширения находится в корневом каталоге, а код «бизнес-логики» - в каталоге Code
.
Как вы можете видеть в репозитории , я решил создать task.ps1
файл в корневом каталоге задач и использовать его в качестве целевой точки входа для задачи. Обновление обработчика выполнения PowerShell3
также означало необходимость обновления способа получения входных данных задачи, поэтому я использую файл task.ps1
для получения входных данных, а затем просто вызываю сценарий Code\Wait.ps1
. Это позволяет мне сохранять мой код красивым и изолированным, поэтому, если Azure DevOps решит снова изменить ситуацию с помощью нового обработчика выполнения, мне не нужно трогать какой-либо код в каталоге Code
, просто task.ps1
файл.