Расширение VSTS: «Невозможно обработать команду из-за одного или нескольких отсутствующих обязательных параметров: имя веб-приложения appdirectory ResourceGroupName» - PullRequest
0 голосов
/ 05 июля 2018

Я работаю над созданием задачи VSTS для выпуска и получаю вышеуказанную ошибку. Я знаю, что означает ошибка, но не знаю, как ее устранить, поскольку я впервые создаю пользовательскую задачу.

По сути, задача принимает исходный файл и передает его по протоколу FTP в Azure, основываясь на опубликованных настройках профиля, достигнутых в скрипте.

Вот код PowerShell:

[CmdletBinding()]
param()

Trace-VstsEnteringInvocation $MyInvocation

$appdirectory = get-vstsinput -Name appdirectory
$webappname = get-vstsinput -Name webappname
$ResourceGroupName = get-vstsinput -Name ResourceGroupName

#write-host $appdirectory

$location="East US"
    try {
    # Get inputs.
    # Get publishing profile for the web app
    $xml = [xml](Get-AzureRmWebAppPublishingProfile -Name $webappname `
    -ResourceGroupName $ResourceGroupName `
    -OutputFile null)

    # Extracts connection information from publishing profile
    $username = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userName").value
    $password = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@userPWD").value
    $url = $xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@publishUrl").value

    Write-Output "$username"
    Write-Output "$password"
    Write-Output "$url"
    #Write-Output "$localpath"

    # Upload files recursively
    Set-Location $appdirectory
    $webclient = New-Object -TypeName System.Net.WebClient
    $webclient.Credentials = New-Object System.Net.NetworkCredential($username,$password)
    $files = Get-ChildItem -Path $appdirectory -Recurse | Where-Object{!($_.PSIsContainer)}
    foreach ($file in $files)
    {
        $relativepath = (Resolve-Path -Path $file.FullName -Relative).Replace(".\", "").Replace('\', '/')
        $uri = New-Object System.Uri("$url/$relativepath")
        "Uploading to " + $uri.AbsoluteUri
        $webclient.UploadFile($uri, $file.FullName)
    }
    $webclient.Dispose()

    } finally {
        Trace-VstsLeavingInvocation $MyInvocation
    }

С этим связан файл JSON, который используется для сборки и менеджера выпусков в TFS. Вот код для этого:

    {
    "id": "LongStringofNumbers",
    "name": "NameOfTask",
    "friendlyName": "FriendlyNameOfTask",
    "description": "Build Task that will upload a file or folder to a destination in Azure using Published Profile Credentials.",
    "helpMarkDown": "",
    "category": "Build",
    "visibility": [
        "Build"
    ],
    "runsOn": [
        "Agent",
        "DeploymentGroup"
    ],
    "author": "ME",
    "version": {
        "Major": 0,
        "Minor": 0,
        "Patch": 16
    },
    "instanceNameFormat": "Uploads File Using Published Profile Credentials",
    "groups": [
        {
            "name": "advanced",
            "displayName": "Advanced",
            "isExpanded": true
        }
    ],
    "inputs": [
        {
            "name": "appdirectory",
            "type": "filePath",
            "label": "Source Path",
            "defaultValue": "",
            "required": true,
            "helpMarkDown": "Location of file(s) for uploading to Azure."
        },
        {
            "name": "webappname",
            "type": "string",
            "label": "Azure Webapp name",
            "defaultValue": "",
            "required": true,
            "helpMarkDown": "Azure App name; I.E. - 900014campuslinkapi."
        },
        {
            "name": "ResourceGroupName",
            "type": "string",
            "label": "Azure Resource Group name",
            "defaultValue": "",
            "required": true,
            "helpMarkDown": "Azure Resource Group Name I.E. - 900014-prod."
        }
    ],
    "execution": {
        "PowerShell3": {
            "target": "powershell.ps1",
            "platforms": [
                "windows"
            ],
            "argumentFormat": "",
            "workingDirectory": "$(currentDirectory)"
        }
    }
}

Итак, ошибка говорит о том, что мне нужны три обязательных параметра, которые из файла JSON добавляются в качестве поля в диспетчере релизов. Но я не думаю, что сценарий и файл JSON по какой-то причине соединяются, поэтому даже когда я помещаю элементы в поля диспетчера выпусков, он все равно завершается ошибкой. Вот изображение:

Enter image description here

1 Ответ

0 голосов
/ 06 июля 2018

Вы все еще должны вставить значения в ваш скрипт. Посмотрите, как функционируют справочные задачи , или посмотрите документацию .

.

Ваш скрипт должен импортировать и использовать SDK задачи и вызвать Get-VstsInput, чтобы получить значения.

Для этого стоит использовать обработчик PowerShell3, поскольку PowerShell является устаревшим.

Другой вариант - не создавать пользовательское задание, если оно предназначено только для внутреннего использования, хотя с моей стороны это 100% смещение. Мне не нравится превращать простые сценарии PowerShell в непрозрачные черные ящики и предпочитаю выводить все из системы контроля версий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...