Azure DevOps Pipelines:环境变量在 dotnet test 命令中不可用

问题描述 投票:0回答:1

我正在使用 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

.net powershell azure-devops azure-pipelines cicd
1个回答
0
投票

使用通过
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 端点具有服务主体身份验证方案或工作负载身份联合身份验证方案时,才会遵守此规则。

© www.soinside.com 2019 - 2024. All rights reserved.