【发布时间】:2018-09-25 23:30:10
【问题描述】:
我在 vsts 中有一个发布定义,需要访问我定义为变量组中的秘密变量的密码。我已将该组链接到此版本定义,但是当我运行任务时,参数最终为空白。我需要做些什么来获取秘密变量的值吗?
使用密码的powershell任务的定义
链接变量组
错误输出:
2017-08-09T14:01:17.9262375Z ##[command]. 'C:\agent_work\r1\a\$(AGENT.BUILDDIRECTORY)\RCV\deploys\common\Get-FromArtifactory.ps1' -repoUsername developer -repoPassword -repoPath libs-snapshot-local
2017-08-09T14:01:18.8168538Z ##[error]C:\agent_work\r1\a\$(AGENT.BUILDDIRECTORY)\RCV\deploys\common\Get-FromArtifactory.ps1 : Missing an argument for parameter 'repoPassword'. Specify a parameter of type 'System.String' and try again.
已按要求添加更多信息。
这是我的 Get-FromArtifactory.ps1 的开始
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[String]
$repoUsername,
[Parameter()]
[String]
$repoPassword,
# Other params
)
#setup credentials object for arty access
$secPassword = $repoPassword | ConvertTo-SecureString -asPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($repoUsername, $secPassword)
2017 年 8 月 15 日编辑 - 我已将其更新为使用 @Marina-MSFT 建议的引号,但它仍然只是传入空白。
修改了打印部分密码的脚本:
[CmdletBinding()]
param (
[Parameter(Mandatory)]
[String]
$repoUsername,
[Parameter()]
[String]
$repoPassword,
#other params
)
write-host "pword $repoPassword"
write-host "1st char: $($repoPassword[0])"
2017-08-15T09:23:00.8606081Z ##[command]. 'C:\agent_work\r1\a\RCV\deploys\common\Get-FromArtifactory.ps1' -repoUsername developer -repoPassword "" -repoPath libs-snapshot-local -artifactName ipo-deposit-accounts_2.11 -artifactPath uk/gov/ipo -artifactVersion 0.1-SNAPSHOT -downloadDir C:\agent_work\r1\a
2017-08-15T09:23:02.3606174Z pword
2017-08-15T09:23:02.3606174Z 1st char:
2017-08-15T09:22:10.6573655Z ##[command]. 'C:\agent_work\r1\a\RCV\deploys\common\Get-FromArtifactory.ps1' -repoUsername developer -repoPassword '' -repoPath libs-snapshot-local -artifactName ipo-deposit-accounts_2.11 -artifactPath uk/gov/ipo -artifactVersion 0.1-SNAPSHOT -downloadDir C:\agent_work\r1\a
2017-08-15T09:22:11.2198723Z pword
2017-08-15T09:22:11.3761178Z 1st char:
【问题讨论】:
-
变量组中的秘密变量可以很好地配合发布任务。您能否向
Get-FromArtifactory.ps1脚本展示您如何使用repoPassword变量。另外请检查您是否在发布定义中命名了相同的变量repo1.password? -
@Marina-MSFT 我在上面添加了脚本详细信息。不确定发布定义中的变量 repo1.password 是什么意思 - 它在变量组中,这还不够吗?
-
如果将
$(repo1.password)使用单引号作为-repoPassword '$(repo1.password)',结果会怎样? -
@Marina-MSFT 我无法更改脚本的路径,因为它不在链接的工件内。并且在参数中对变量使用单引号并没有任何区别。
-
可以直接使用
$(repo1.password),加引号(如-repoPassword '$(repo1.password)'或-repoPassword "$(repo1.password)"。但不允许处理($repoPassword | ConvertTo-SecureString -asPlainText -Force)安全变量。
标签: azure-devops