#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..