Я использую 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, и я хотел бы, чтобы эти переменные оставались секретными (замаскированы или удалены из журналы)
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 имеет схему аутентификации субъекта-службы или схему аутентификации федерации удостоверений рабочей нагрузки.
@KevinJames эти переменные должны быть установлены как секретные по умолчанию при использовании addSpnToEnvironment: true
. То же самое, когда вы используете task.setvariable
с issecret=true
. Имейте в виду, что опубликованный мной код — это всего лишь пример, показывающий, как использовать переменные. В любом случае, я почти уверен, что если вы попытаетесь использовать примеры, результат будет замаскирован *****
.
@KevinJames попробуйте один из подходов и дайте мне знать, сработает ли он.
Работал с использованием addSpnToEnvironment, спасибо, @Rui Jarimba!
Привет @Rui Jarimba, я бы хотел, чтобы эти переменные оставались секретными (замаскированы/удалены из журналов)