我正在使用 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 命令。
可能导致此问题的原因是什么?如何确保这些环境变量正确传递到同一 Azure CLI 任务中的 dotnet test 命令并可由其访问?
请注意,我要求 dotnet 测试位于 AzureCLI@2 任务内部,以利用 Azure Identity SDK 中的新 AzurePipelinesCredential
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: |
Write-Host "Tenant ID: " + $Env:TENANT_ID # set in previous task
...
# 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: |
Write-Host "Service Principal ID: " + $env:servicePrincipalId
... other commands here
仅当 Azure 端点具有服务主体身份验证方案或工作负载身份联合身份验证方案时,才会遵守此规则。