枚举Azure管道中的秘密变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举Azure管道中的秘密变量相关的知识,希望对你有一定的参考价值。
我在Azure管道中有一个构建步骤,它从Azure管道获取变量并将它们上传到同样秘密的地方。目前我有大约50个构建,每个构建有5-20个变量。
有些是秘密,有些则不是。因此,对于非秘密的,我列举所有设置的,然后离开;但对于秘密的,我需要手动将它们添加到构建步骤;此外,因为我用相同的键写它们我需要:
- 在组中声明变量,例如
MyPrefix.MyVar
- 编辑构建步骤以说
/specialtool --vars=MyPrefix.MyVar=$(MyPrefix.MyVar)
这是相当普通的。
我发现我可以使用Azure DevOps api获取变量列表,所以我想我可以在构建运行时修改下一个构建步骤。
但是,如果我更新当前正在运行的相同构建定义(以动态编写命令),则不会将其发送给代理(相反,感觉就像在触发整个构建时捕获任务的所有参数一样)。有关如何动态枚举秘密变量以提供给我的工具的任何想法?
您可以使用VSTS Logging Commands在构建期间更新变量值。这将使更新的变量在下一个构建任务中可用。
Write-Host "##vso[task.setvariable variable=testvar;]testvalue"
当您创建Typescript自定义任务(基于NodeJS)时,您可以通过the getVariable
api.访问该时间点可用于构建的所有构建变量
此函数返回VariableInfo
数组:
/** Snapshot of a variable at the time when getVariables was called. */
export interface VariableInfo {
name: string;
value: string;
secret: boolean;
}
创建PowerShell3自定义任务时,您可以通过the Get-VstsTaskVariable function.访问该时间点可用于构建的所有构建变量
它返回与Node版本类似的对象结构:
New-Object -TypeName psobject -Property @{
Name = $info.Name
Value = Get-TaskVariable -Name $info.Name
Secret = $info.Secret
}
如果您还需要支持TFS 2015和1.x构建代理,您可以使用(现已弃用)PowerShell处理程序并使用自定义PowerShell函数I describe here枚举秘密。
每个任务SDK(Typescript和Powershell)都支持一个设置变量的函数。以下是Typescript中setting the variable value的示例:
tl.setVariable(variable, value, isSecret);
在PowerShell3上:
Set-VstsTaskVariable -name $VariableName -value $Value -Secret $IsSecret
在PowerShell上(已弃用):
Write-Host "##vso[task.setvariable variable=$($VariableName);issecret=$($IsSecret)]$Value"
我怀疑你是想创建一个单独的任务来读取变量并调用你在原始帖子中提到的命令,然后将这些变量发布到另一个秘密商店。不建议阅读所有秘密,并将它们存储在非秘密变量中,或以某种方式将它们传递给下一个任务。
所以我一直在寻找解决方案。目前执行此操作的唯一方法是编写自定义任务。在自定义任务中,您可以动态获取秘密值。
一个例子是'vsts-replacetokens-task'(https://github.com/qetza/vsts-replacetokens-task/blob/master/task/index.ts)
在内部它使用vsts任务库(vsts-task-lib / task)(https://github.com/Microsoft/azure-pipelines-task-lib/blob/master/node/task.ts)
这个vsts任务库公开了像GetVariables()和GetVariable()等方法,可以提供你需要的东西。不幸有点啰嗦,但我能看到的唯一方法。
以上是关于枚举Azure管道中的秘密变量的主要内容,如果未能解决你的问题,请参考以下文章
如何将Azure管道变量传递给AzureResourceManagerTemplateDeployment @ 3任务使用的ARM模板?
在 azure 中的发布管道之间传递变量(触发 azure 管道扩展)
有没有办法更新 Azure DevOps 管道中的变量组变量?