TFS 2018 - пользовательская задача сборки с логическими параметрами
Я создал пользовательскую задачу сборки и ее расширение для TFS 2018. Два моих параметра - логические. На task.json я установил значение по умолчанию false. Когда я выполняю определение сборки с моей задачей, я получаю следующую ошибку:
System.Management.Automation.ParameterBindingArgumentTransformationException: Невозможно обработать преобразование аргумента для параметра isToDeploy. Невозможно преобразовать значение "System.String" в тип "System.Boolean". Логические параметры принимают только логические значения и числа, такие как $True, $False, 1 или 0. ---> System.Management.Automation.ArgumentTransformationMetadataException: Невозможно преобразовать значение "System.String" в тип "System.Boolean". Логические параметры принимают только логические значения и числа, такие как $True, $False, 1 или 0. ---> System.Management.Automation.PSInvalidCastException: Невозможно преобразовать значение "System.String" в тип "System.Boolean". Логические параметры принимают только логические значения и числа, такие как $True, $False, 1 или 0.
Вот мой PowerShell
[CmdletBinding()]
param(
[string][Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] $qaApiEndpoint,
[string][Parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] $deployfxEndpoint,
[bool][Parameter(Mandatory=$true)] $isToDeploy,
[string][Parameter(Mandatory=$false)] $deploymentType,
[string][Parameter(Mandatory=$false)] $environment,
[bool][Parameter(Mandatory=$false)] $isToArchivePackage,
[string][Parameter(Mandatory=$false)] $archiveLocation
)
Вот мой Task.json (входная часть) (игнорировать???, так как эта задача еще находится в разработке)
"inputs": [
{
"name": "qaApiEndpoint",
"type": "string",
"label": "QA Web API Endpoint",
"defaultValue": "",
"required": true,
"helpMarkDown": "Endpoint for the QA Web API.",
"groupName": "GeneralGroup"
},
{
"name": "deployfxEndpoint",
"type": "string",
"label": "Deploy Fx Endpoint???",
"defaultValue": "",
"required": true,
"helpMarkDown": "???",
"groupName": "GeneralGroup"
},
{
"name": "isToDeploy",
"type": "boolean",
"label": "Deploy?",
"defaultValue": false,
"required": false,
"helpMarkDown": "Should the task perform the application's deployment?",
"groupName": "DeploymentGroup"
},
{
"name": "deploymentType",
"type": "string",
"label": "Deployment Type",
"defaultValue": "",
"required": false,
"helpMarkDown": "Ex: Full, Update, Patch",
"groupName": "DeploymentGroup"
},
{
"name": "environment",
"type": "string",
"label": "Environment to deploy",
"defaultValue": "",
"required": false,
"helpMarkDown": "Ex: DEV, TST, QA, PRD",
"groupName": "DeploymentGroup"
},
{
"name": "isToArchivePackage",
"type": "boolean",
"label": "Archive Package?",
"defaultValue": false,
"required": false,
"helpMarkDown": "Should the package be archived?",
"groupName": "PackageGroup"
},
{
"name": "archiveLocation",
"type": "string",
"label": "Archive Location",
"defaultValue": "",
"required": false,
"helpMarkDown": "Path for the package archive",
"groupName": "PackageGroup"
}
]
Как говорится в сообщении об ошибке, я уже пытался изменить значение в Task.json для логических значений на $False, 0 и даже на "false". Я также попытался вместо этого изменить тип на bool и даже изменить параметры в json и powershell на string, а затем преобразовать значения в логические значения в powershell. Все мои попытки заканчивались одной и той же ошибкой.
Еще более странно то, что я удалил логические значения из powershell и json, но у меня возникла одна и та же ошибка... которая вообще не имеет смысла и заставляет меня задаться вопросом, сталкиваюсь ли я с проблемой кеша или чем-то еще. (да, я перезагружал машину между делом).
== Редактирование ==
Странное поведение, описанное выше, происходит из-за того, что я не обновлял идентификатор task.json и vss-extension.json. Нужно делать это между каждой попыткой.
== Конец редактирования ==
Чтобы "обновить" свою таможенную задачу, я просто удаляю задачу в определении сборки, удаляю расширение из коллекции и удаляю его из TFS, а затем снова все устанавливаю.
Проверенные комбинации
- логическое и ложное
- логическое и 0
- логическое и "ложное"
- логическое и $ False
- логическое и "$False"
- логическое и "$false"
- логическое и $ false
- bool и 0
0 ответов
Не уверен, что это все еще актуально или вы уже нашли решение.
Просто предоставил ответ, потому что я столкнулся с той же проблемой пару дней назад.
Получала ту же ошибку, и кажется, что TFS хранит свои входные данные в виде строк. Для меня решение было добавить -AsBool
до объявления моей переменной / параметра в исполняемом скрипте PS1:
[CmdletBinding()]
[bool]$ExcludeGated = Get-VstsInput -Name ExcludeGated -AsBool
Это, однако, требует использования функции Get-VstsInput
который идет с VstsTaskSdk
Часть JSON для этого конкретного логического значения выглядит как стандартная запись:
{
"name": "ExcludeGated",
"type": "Boolean",
"label": "Gated Exclusion flag",
"defaultValue": "true",
"required": false,
"helpMarkDown": "your helpful markdown comment here"
}