在 Azure DevOps 管道中编写 Azure CLI 脚本时,您可以访问服务主体 ID、密钥和租户 ID。那么在 Azure Powershell 任务中有没有一种获取这些信息的方法呢?
addSpnToEnvironment
输入选项可以将你所选择的Azure终结点的service principal id和key添加到脚本环境中,该选项仅适用于Azure CLI Task,而非Azure Powershell Task。
是否有办法在Azure Powershell任务中获取此信息?
作为替代解决方案,在Azure ClI Task
中我们可以定义作业范围变量,详见此文档。
测试步骤:
1.使用最新的Azure CLI task
2.0-preview并选择Powershell类型。尝试使用类似以下的内联脚本:
Write-Host "##vso[task.setvariable variable=SpId;]$env:servicePrincipalId"
Write-Host "##vso[task.setvariable variable=SpKey;]$env:servicePrincipalKey"
Write-Host "##vso[task.setvariable variable=TenantId;]$env:tenantId"
Write-Host "##vso[task.setvariable variable=TestVar;]JustForTest"
2.在Azure CLI Task
之后添加一个Azure Powershell task
来进行测试:
Write-Host $env:SpId
Write-Host $env:SpKey
Write-Host $env:TenantId
Write-Host $env:TestVar
3.输出:
如果您使用Write-Host "##vso[task.setvariable variable=xxx]xxx"
(Powershell)或echo "##vso[task.setvariable variable=xxx]xxx"
(批处理)定义了作业范围的变量,那么您可以使用类似$env:VariableName
的方式来访问信息。日志中的***
是因为这些信息由Azure Devops保护为机密信息,所以它们被掩盖。
您可以通过Azure CLI任务调用PowerShell脚本,并使用“addSpnToEnvironment”标志,如接受的答案所述。
- task: AzureCLI@2
displayName: 'Custom ps script'
inputs:
azureSubscription: ${{ parameters.serviceConnection }}
addSpnToEnvironment: true # Adds DevOps SP details to context
scriptType: pscore
scriptPath: '$(System.DefaultWorkingDirectory)/somescript.ps1'
task.setvariable variable xxx
)。如果您看到***
,这意味着值已经正确传递,因为DevOps只会将项目机密值从日志中隐藏... - LoLance