Конвейеры Azure DevOps: переменные среды недоступны в команде dotnet test

Я использую Azure DevOps, и у меня настроена задача AzureCLI для запуска интеграционных тестов с помощью команды dotnet test. Я столкнулся с проблемой, из-за которой переменные среды, установленные в задаче, кажутся недоступными при выполнении dotnet test.

Вот соответствующая часть моей конфигурации конвейера:

- task: AzureCLI@2
  displayName: 'Run Integration Tests Inside AZ CLI'
  inputs:
    azureSubscription: ${{ parameters.azureServiceConnection }}
    scriptType: pscore
    scriptLocation: 'inlineScript'
    addSpnToEnvironment: true
    inlineScript: |
      # Commands to set environment variables
      Write-Host "##vso[task.setvariable variable=TENANT_ID;issecret=true]$(tenantId)"
      ...

      $env:TENANT_ID = "$(tenantId)"
      ...

      # Running dotnet test
      dotnet test --configuration $(buildConfiguration) ...

Переменные, такие как TENANT_ID, устанавливаются с помощью ##vso[task.setvariable], а также пытаются быть установлены в области сеанса сценария с помощью $env: для использования в том же сценарии. Однако эти переменные, по-видимому, недоступны или неправильно переданы команде dotnet test.

Что может быть причиной этой проблемы и как я могу гарантировать, что эти переменные среды правильно передаются и доступны для команды dotnet test в одной и той же задаче Azure CLI?

Обратите внимание: мне нужно, чтобы тест dotnet находился внутри задачи AzureCLI@2, чтобы использовать новый AzurePipelinesCredential из Azure Identity SDK, и я хотел бы, чтобы эти переменные оставались секретными (замаскированы или удалены из журналы)

Стоит ли изучать 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
0
90
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Использование переменных конвейера, установленных с помощью task.setvariable

Вы не можете использовать набор переменных с командой регистрации Task.setvariable в той же задаче, где он был установлен.

Переменная используется следующими задачами как переменная среды:

- task: AzureCLI@2
  displayName: 'Set pipeline variables'
  inputs:
    azureSubscription: ${{ parameters.azureServiceConnection }}
    scriptType: pscore
    scriptLocation: 'inlineScript'
    addSpnToEnvironment: true
    inlineScript: |

      # Commands to set environment variables
      Write-Host "##vso[task.setvariable variable=TENANT_ID;issecret=true]$(tenantId)"
      
      ... other commands here

- task: AzureCLI@2
  displayName: 'Run Integration Tests Inside AZ CLI'
  inputs:
    azureSubscription: ${{ parameters.azureServiceConnection }}
    scriptType: pscore
    scriptLocation: 'inlineScript'
    addSpnToEnvironment: true
    inlineScript: |

      # Using Powershell syntax to access the variable set in previous task
      # For demonstration purpose only.
      # Value is available as a secret, so its output will be masked
      Write-Host "Tenant ID: " + $Env:TENANT_ID 

      # Using macro syntax to access the variable set in previous task
      # For demonstration purpose only.
      # Value is available as a secret, so its output will be masked
      Write-Host "Tenant ID: " + $(TENANT_ID)
      ...

      # Running dotnet test
      dotnet test --configuration $(buildConfiguration) ...

Использование задачи AzureCLI@2 с addSpnToEnvironment: true

При использовании AzureCLI@2, если вы хотите получить доступ к сведениям о субъекте-службе в сценарии, вам не нужно задавать переменные конвейера — если только вам не нужно использовать эти сведения и в других задачах.

Вы можете использовать переменные servicePrincipalId, servicePrincipalKey или idToken и tenantId в своем скрипте.

Пример:

- task: AzureCLI@2
  displayName: 'Run Integration Tests Inside AZ CLI'
  inputs:
    azureSubscription: ${{ parameters.azureServiceConnection }}
    scriptType: pscore
    scriptLocation: 'inlineScript'
    addSpnToEnvironment: true
    inlineScript: |

      # Accessing one of the variables that are accessible with addSpnToEnvironment: true
      # For demonstration purpose only.
      # Value is available as a secret, so its output will be masked
      Write-Host "Service Principal ID: " + $env:servicePrincipalId 

      ... other commands here

Это учитывается только в том случае, если конечная точка Azure имеет схему аутентификации субъекта-службы или схему аутентификации федерации удостоверений рабочей нагрузки.

Привет @Rui Jarimba, я бы хотел, чтобы эти переменные оставались секретными (замаскированы/удалены из журналов)

Kevin James 22.06.2024 16:35

@KevinJames эти переменные должны быть установлены как секретные по умолчанию при использовании addSpnToEnvironment: true. То же самое, когда вы используете task.setvariable с issecret=true. Имейте в виду, что опубликованный мной код — это всего лишь пример, показывающий, как использовать переменные. В любом случае, я почти уверен, что если вы попытаетесь использовать примеры, результат будет замаскирован *****.

Rui Jarimba 22.06.2024 16:43

@KevinJames попробуйте один из подходов и дайте мне знать, сработает ли он.

Rui Jarimba 22.06.2024 16:53

Работал с использованием addSpnToEnvironment, спасибо, @Rui Jarimba!

Kevin James 23.06.2024 01:49

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