Не удается запустить сценарий PowerShell в конвейере Azure DevOps «ошибка анализа»

#azure #azure-devops #azure-devops-pipelines

Вопрос:

Итак, я новичок в Azure Devops (но не в Azure или PowerShell). У меня есть два сценария в качестве задач в моем конвейере, первый работает идеально (Примечание: нет команд модуля az). Второй не работает (у него один вызов Az). Ошибка, которую я получаю в конвейере, заключается в следующем:

 ParserError: /home/vsts/work/_temp/3f7b3ce1-6afb-46f3-b00d-1efe35fbac71.ps1:5
Line |
   5 |  } else {
     |  ~
     | Unexpected token '}' in expression or statement.
 

Вот в чем дело… У меня нет»} else {«в моем сценарии или, по крайней мере, я удалил его и получил ту же ошибку.

Так что, что бы ни было причиной этого, это более фундаментально, чем мой сценарий. Я предположил, что «/home/vsts/work/_temp/3f7b3ce1-6afb-46f3-b00d-1efe35fbac71.ps1 » был моим сценарием, скопированным в удаленную систему, но, похоже, это не так.

Есть ли какой-нибудь способ узнать, что это за файл?

Задача — «PowerShell@2» с набором «pwsh: true». Спасибо!

ЯМЛ:

 trigger:
- main

pool:
  vmImage: ubuntu-latest

steps:
- task: AzureResourceManagerTemplateDeployment@3
  inputs:
    deploymentScope: 'Resource Group'
    azureResourceManagerConnection: 'Pay-As-You-Go(<guid>)'
    subscriptionId: '<guid>'
    action: 'Create Or Update Resource Group'
    resourceGroupName: 'project-Test'
    location: 'East US 2'
    templateLocation: 'Linked artifact'
    csmFile: 'deploy.template.json'
    csmParametersFile: 'deploy.parameters.json'
    deploymentMode: 'Incremental'
    deploymentOutputs: 'DeploymentOutput'

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: $(System.DefaultWorkingDirectory)/Get-ArmDeploymentOutput.ps1 -ArmOutputString '$(DeploymentOutput)' -MakeOutput -ErrorAction Stop
    pwsh: true
  displayName: Get-ArmDeploymentOutput

- task: PowerShell@2
  inputs:
    targetType: 'inline'
    script: $(System.DefaultWorkingDirectory)/Set-AzWebAppIPRestriction.ps1 -Priority 100 -Action 'Allow' -WebAppId '$(WebAppId)' -PipId '$(gwpipId)'' -ErrorAction Stop
    pwsh: true
  displayName: Set-AzWebAppIPRestriction
 

Комментарии:

1. Вам нужно указать YAML, <guid>.ps1 имя файла-это просто файл, который создается для вашего встроенного скрипта.

2. Я добавил YAML.

3. Это не встроенные сценарии. Это файлы. Попробуйте изменить значение targetType на filePath . Если вы получаете ошибки пути, вставьте a - pwsh: Get-ChildItem $(System.DefaultWorkingDirectory) -Recurse , чтобы получить вывод каталога и помочь решить проблемы с путем.

Ответ №1:

Я обнаружил ' -PipId '$(gwpipId)'' , что в сценарии вашей второй задачи powershell есть дополнительный вход. Может быть, это и стало причиной ошибки.

script: $(System.DefaultWorkingDirectory)/Set-AzWebAppIPRestriction.ps1 -Priority 100 -Action 'Allow' -WebAppId '$(WebAppId)' -PipId '$(gwpipId)'' -ErrorAction Stop

Так как вы запускали свои сценарии в файле .ps1. Вам следует изменить targetType параметр задачи powershell на filePath . И установите файл .ps1 в filePath параметре. См. Пример ниже:

 steps:
- task: PowerShell@2
  displayName: 'PowerShell Script'
  inputs:
    targetType: filePath
    filePath: '$(System.DefaultWorkingDirectory)/Set-AzWebAppIPRestriction.ps1'
    arguments: '-Priority 100 -Action "Allow" -WebAppId "$(WebAppId)" -PipId "$(gwpipId)" -ErrorAction Stop'
    pwsh: true
 

Если вы используете модуль azure powershell в своих сценариях. Вы можете использовать задачу Azure powershell вместо задачи powershell..