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"
}
Другие вопросы по тегам