Конвейеры Azure bash пытается выполнить переменную вместо расширения

Это действительно глупо, но сводило меня с ума на пару часов. Я тестирую, как передавать переменные между 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: команда не найдена

Я пробовал со всеми видами кавычек, двойными, простыми, никакими. Ничего не работает.

$(...) — это синтаксис подстановки команд, поэтому да, он ищет команду с именем LastCommit. Для расширения параметра вы ищете echo "$LastCommit"
glenn jackman 18.12.2020 23:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
1 218
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Решение:

+              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

Привет, спасибо, что поделились, вы могли бы принять это как ответ, это могло бы помочь другим членам сообщества, у которых возникают те же проблемы, и мы могли бы заархивировать эту тему, спасибо.

Vito Liu 21.12.2020 03:41

Если вы хотите использовать 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)

Другие вопросы по теме