【问题标题】:How do you reset the value of an Azure DevOps input variable?如何重置 Azure DevOps 输入变量的值?
【发布时间】:2019-05-18 02:35:54
【问题描述】:

如何重置 Azure DevOps Get-VstsInput 变量的值?

我正在本地从自定义任务运行 PowerShell 脚本,以检查它是否按预期工作...

Invoke-VstsTaskScript -ScriptBlock { . ..\buildAndReleaseTask\main.ps1 }

第一次运行脚本时,我会收到各种值的提示。该脚本使用 SDK 函数 Get-VstsInput 获取输入。

但是在脚本的后续运行中,这些值已经设置好了。 但是,我在文档中看不到有关如何重置该值的任何指示。

代码首先获取用户在 Azure DevOps 管道对话框中填写的所需值...

$serverName= Get-VstsInput -Name "serverName" -Require

我检查了环境变量,但没有。

我找到的唯一解决方案是关闭我的 PowerShell 控制台。

【问题讨论】:

  • 没有看到有问题的代码,这是 WildAssGuess ...您是否正确初始化了 $Vars?是 $Var 通过的路径,这样您就可以使用 $Var 而不首先将其设置为已知值,例如 $Null<blank>
  • 在理解你的意思时有点困难,但也许可以通过这个documentation 使用一些命令来查看设置变量。

标签: powershell azure-devops azure-pipelines azure-pipelines-build-task


【解决方案1】:

来自文档:

为了方便交互测试,模块会提示未定义的任务变量和输入。例如,如果未定义任务变量,Get-VstsTaskInput -Name SomeVariable 将提示输入值。如果输入了一个值,那么它将被存储,以便后续调用将返回相同的值。任务变量存储为环境变量。 输入和端点存储在 VstsTaskSdk 模块内部,可以通过删除并重新导入模块来清除。

所以调用Remove-Module VstsTaskSdk 应该可以解决问题。

我倾向于通过环境变量设置我的变量和输入,而不是依赖交互模式,这使得它们更容易更改并且在 Node 和 Powershell 处理程序之间的工作方式相同:

# Task variable 'Build.SourcesDirectory':
$env:BUILD_SOURCESDIRECTORY = [...]

# Input 'MyInput':
$env:INPUT_MYINPUT = [...]

# Endpoint:
$env:INPUT_MYENDPOINT = 'EP1'
$env:ENDPOINT_URL_EP1 = 'https://[...]'
$env:ENDPOINT_AUTH_EP1 = '{ "Parameters": { "UserName": "Some user", "Password": "Some password" }, "Scheme": "Some scheme" }'
$env:ENDPOINT_DATA_EP1 = '{ "Key1": "Value1", "Key2": "Value2" }'

另见:

【讨论】:

  • 啊哈 ... Remove-Module 技巧是我需要的答案。我一直在使用 Get-VstsInput 而不是 Get-VstsTaskInput,它似乎将值存储在哈希表中,而不是环境变量中。我还在疑惑Get-Input方法怎么变成Get-VstsInput
  • 这里定义了一个默认的命令前缀:github.com/Microsoft/azure-pipelines-task-lib/blob/master/…
  • 如果你把它们放在环境中,任务就会把它捡起来。如果你不这样做,它会弹出一个对话框并在内部存储值。输入需要定义为INPUT_*全部大写,将任何非字母数字字符替换为_
猜你喜欢
  • 2019-12-31
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 2019-12-17
  • 2021-01-29
  • 2020-01-05
  • 1970-01-01
  • 2020-09-27
相关资源
最近更新 更多