Azure devops 从构建管道的预定义变量列表中选择

Azure devops 从构建管道的预定义变量列表中选择,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我正在创建一个Azure管道,它将包含一些复杂的变量,但所有变量值都是四个可能值之一。运行管道时是否可以从列表中选择变量值,或者我是否需要创建扩展来完成此操作?您可以使用powershell脚本首先拆分值 例如,有一个变量名为var,其值为one,two,three,four。在管道中,我只希望使用值one 步骤1: 编写一个包含以下脚本的ps1文件,以拆分这些值 Param( [string]$a ) [array]$b = $a.split('.') [string]$ma = $b[0]

我正在创建一个Azure管道,它将包含一些复杂的变量,但所有变量值都是四个可能值之一。运行管道时是否可以从列表中选择变量值,或者我是否需要创建扩展来完成此操作?

您可以使用powershell脚本首先拆分值

例如,有一个变量名为
var
,其值为
one
two
three
four
。在管道中,我只希望使用值
one

步骤1:

编写一个包含以下脚本的
ps1
文件,以拆分这些值

Param(
[string]$a
)

[array]$b = $a.split('.')
[string]$ma = $b[0]
注意:我根据
分割变量。所以我将值存储为
1.2.3.4

第二步:

由于该值应先拆分,因此在顶部添加
Powershell
任务,并按以下格式配置:

结果:

第三步:

成功拆分后,根据您想要的场景,该值也应可用于下一个任务

只需在
split.ps1
文件中添加另一个脚本,该脚本将存储所需值的变量设置为输出变量

然后在
Powershell
任务中配置引用名称



现在,接下来的所有任务都可以使用
$(ref.var)

调用该值,这似乎是不可能的,所以我使用了一种变通方法

我在样式
config-team1.json
config-team2.json
中的项目旁边包含了配置文件。我创建了一个变量,在管道运行时可以编辑该变量,名为
config.Name
,并将其默认为
team1
。然后,我为管道创建了一个PowerShell任务,该任务检查一个适当命名的配置文件,并将其复制到
config.json
。例如,如果变量
Config.Name
设置为
team84
,脚本将查找
Config-team84.json
,并将其复制到
Config.json

还使用了另外两个变量,
Config.SourceDirectory
Config.DestinationDirectory
。它们只是指定在何处查找配置文件以及将其复制到何处

$SourceFile=“config-$env:config\u NAME.json”
$SourcePath=“$env:CONFIG\u SOURCEDIRECTORY\$SourceFile”
$DestinationPath=“$env:CONFIG\u DESTINATIONDIRECTORY\CONFIG.json”
写入主机“验证配置文件$SourceFile是否存在”
$FileExists=测试路径-路径$SourcePath-路径类型叶
如果(!$FileExists){
throw“配置文件在$SourcePath不存在,无法继续。”
}
写入主机“复制配置文件”
复制项“$SourcePath”-目标“$DestinationPath”
这是特定于管道的步骤的结束,其余的只是我在实际项目中如何使用它的附加信息


正在构建的项目是用.NETCore编写的,所以我使用了。配置文件示例如下:

{
“someKey”:“someValue”,
“另一个关键”:4,
“yetAnotherKey”:正确
}
您可以获得如下配置数据:

var configuration=new ConfigurationBuilder()
.AddJsonFile(“config.json”,false)//false表示该文件不是可选的
.Build();
在上述情况下,
配置
将属于以下类型

您可以直接使用此配置对象:

var-someVal=configuration[“someKey”];
或者,如果将键放在父键中,则可以为配置创建强类型类:

{
“myConfig”:{
“someKey”:“someValue”,
“另一个关键”:4,
“yetAnotherKey”:正确
}
}
C#类将如下所示:

公共类测试配置
{
公共字符串SomeKey{get;set;}
另一个公钥{get;set;}
公共bool-YetAnotherKey{get;set;}
}
像这样实例化和使用类:

var testConfig=configuration.GetSection(“myConfig”).Get();
var someVal=testConfig.SomeKey;

我可以在周末之前知道此问题的状态吗?下面的问题对你有用吗?我想我的问题不清楚,对不起。我希望能够对变量进行预设,如“团队1”、“团队2”等,并在管道运行时从变量列表中进行选择。我最终在正在构建的代码中使用了配置文件,而您只需指定配置文件的名称。遗憾的是,我在这里被误解了。你能在这里分享解决方案并接受它作为答案吗?我想包括我在内的其他人都愿意学习这样的方法:—)@MerlinLiang MSFT对不起,当时正在度假,刚刚发布了那个答案。再次感谢你!