如何使我的Powershell市场任务可以访问在azure发布管道中定义的Secret变量(SecretVar)?

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

如何使在 azure release pipeline 中定义的 Secret 变量 (SecretVar) 可以访问我的用于创建 marketplace 任务的 Powershell (vsix)?

azure-devops azure-pipelines-release-pipeline vsix azure-devops-extensions azure-marketplace
1个回答
0
投票

如何使我的Powershell用于创建市场任务(vsix)的Powershell可以访问在azure发布管道中定义的秘密变量(SecretVar)?

您不能直接从任务中访问秘密变量。这种行为是为了保护秘密变量不在任务中暴露而设计的。

此文档 表示,秘密变量是。

  • 不会被解密为环境变量 所以你的构建步骤运行的脚本和程序默认不给访问。
  • 解密后由你的构建步骤访问。所以你可以在 密码参数,也可以将它们明确地传递到脚本或您的构建步骤的程序中。 (例如$(password))。

这就是为什么你不能在任务中使用秘密变量的原因。

为了解决这个问题,我们需要显式映射秘密变量。

variables:
 GLOBAL_MYSECRET: $(mySecret) 
 GLOBAL_MY_MAPPED_ENV_VAR: foo 

steps:

- Youtask: |

  env:
    MY_MAPPED_ENV_VAR: $(mySecret) # right way to map to an env variable

或者如果秘密变量可以设置为 arguments,我们可以使用它。

variables:
  VMS_USER: $(vmsUser)
  VMS_PASS: $(vmsAdminPass)

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureFileCopy@4
  inputs:
    SourcePath: 'my/path'
    azureSubscription: 'my-subscription'
    Destination: 'AzureVMs'
    storage: 'my-storage'
    resourceGroup: 'my-rg'
    vmsAdminUserName: $(VMS_USER)
    vmsAdminPassword: $(VMS_PASS)

如果你的任务不支持 env:arguments 明确地将秘密变量传递到脚本中,你不能在任务中使用它。

您可以检查 这条 为和 证件 了解更多细节。

更新。

我的自定义市场任务使用的是Powershell(而不是yaml),我想在那里访问它。我怎样才能在powershell中进行访问?

如果你想在 powershell 脚本中访问秘密变量,而不是在 inlinepowershell 任务中,你可以尝试通过 PowerShell 参数传递秘密变量的值。

Param(
 [String]$pass
)
if ($pass) { Write-Host "variable is NOT null" }
if (!$pass) { Write-Host "variable is null" }

检查 这条 的一些细节。

希望对大家有所帮助。

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