在 Azure Powershell 任务中使用 Azure DevOps 服务主体详情

9
在 Azure DevOps 管道中编写 Azure CLI 脚本时,您可以访问服务主体 ID、密钥和租户 ID。那么在 Azure Powershell 任务中有没有一种获取这些信息的方法呢?

2
Azure Powershell任务没有直接访问这些信息的功能,因此我们必须在Azure PS任务之前添加一个Azure Cli任务,将这些值传递给我们自己的变量,然后共享给以下的Azure PS任务(task.setvariable variable xxx)。如果您看到***,这意味着值已经正确传递,因为DevOps只会将项目机密值从日志中隐藏... - LoLance
2个回答

13
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.输出:

enter image description here

如果您使用Write-Host "##vso[task.setvariable variable=xxx]xxx"(Powershell)或echo "##vso[task.setvariable variable=xxx]xxx"(批处理)定义了作业范围的变量,那么您可以使用类似$env:VariableName的方式来访问信息。日志中的***是因为这些信息由Azure Devops保护为机密信息,所以它们被掩盖。


有点瑕疵,这是我考虑过的一种方法,但我希望能有更好的解决方案。 - BennyM
嗨@LoLance,感谢您提供的解决方案,我正在尝试使用变量(如上所述)进行登录,即 az login --service-principal --username "$env:SpId" --password "$env:SpKey" --tenant "$env:TenantId"但是它会出现错误 ERROR: argument --username/-u: expected one argument. 我已经尝试过不使用引号。 - Obiii

0

您可以通过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'
 
 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接