Это действительно глупо, но сводило меня с ума на пару часов. Я тестирую, как передавать переменные между Powershell и Bash. Соответствующий код:
steps:
- task: PowerShell@2
name: 'pwsh_script'
inputs:
targetType: 'inline'
script: |
$response = "6458ddcd4edd7b7f68bec10338d47b55d221e975"
echo "latest (harcoded) commit: $response"
Write-Host "##vso[task.setvariable variable=LastCommit;isOutput=True]$response"
- task: Bash@3
name: 'bash_script1'
inputs:
targetType: 'inline'
script: |
echo $(LastCommit)
И я продолжаю получать ошибки, такие как:
/d/a/_temp/b40e64e8-8b5f-42d4-8118-82e8cf8a28c2.sh: строка 1: LastCommit: команда не найдена
Я пробовал со всеми видами кавычек, двойными, простыми, никакими. Ничего не работает.
Решение:
+ Write-Host "##vso[task.setvariable variable=LastCommit;isOutput=True]$response"
- Write-Host "##vso[task.setvariable variable=LastCommit;]$response"
Оказывается, «isOutput» нарушал его, поскольку это означает, что я создавал выходную переменную для нескольких заданий и пытался использовать ее внутри одного задания.
Из официальной документации:
Если вы хотите сделать переменную доступной для будущих заданий, вы должны пометить ее как выходную переменную, используя isOutput=true. Затем вы можете сопоставить его с будущими заданиями, используя синтаксис $[] и включив имя шага, который устанавливает переменную. Выходные переменные для нескольких заданий работают только для заданий на одном этапе.
Чтобы передать переменные заданиям на разных этапах, используйте синтаксис зависимостей этапов.
Когда вы создаете выходную переменную для нескольких заданий, вы должны присвоить выражение переменной. Например:
myVarFromJobA: $[ dependencies.A.outputs['setvarStep.myOutputVar'] ] # map in the variable
Привет, спасибо, что поделились, вы могли бы принять это как ответ, это могло бы помочь другим членам сообщества, у которых возникают те же проблемы, и мы могли бы заархивировать эту тему, спасибо.
Если вы хотите использовать echo $(LastCommit)
тогда вам просто нужно удалить isOutput
Write-Host "##vso[task.setvariable variable=LastCommit]$response"
А с isOutput
вам нужно ссылаться по имени задачи
steps:
- task: PowerShell@2
name: 'pwsh_script'
inputs:
targetType: 'inline'
script: |
$response = "6458ddcd4edd7b7f68bec10338d47b55d221e975"
echo "latest (harcoded) commit: $response"
Write-Host "##vso[task.setvariable variable=LastCommit;isOutput=True]$response"
- task: Bash@3
name: 'bash_script1'
inputs:
targetType: 'inline'
script: |
echo $(pwsh_script.LastCommit)
$(...)
— это синтаксис подстановки команд, поэтому да, он ищет команду с именем LastCommit. Для расширения параметра вы ищетеecho "$LastCommit"