我正在创建一个Azure Pipeline,它将具有一些复杂的变量,但是所有变量值都是四个可能值之一。在运行管道时,是否可以从列表中选择变量值,还是我需要创建一个扩展来完成此操作?
答案 0 :(得分:1)
您可以先使用powershell脚本来拆分值。
例如,有一个变量名monsters.create()
for monster in World.monsters:
Game.Log(monster.name)
,其值为var
,one
,two
,three
。在管道中,我只希望使用值four
。
第1步:
写一个one
文件,其中包含以下脚本以拆分这些值。
ps1
注意:我根据Param(
[string]$a
)
[array]$b = $a.split('.')
[string]$ma = $b[0]
拆分了变量。因此,我将值存储为.
。
第二步:
由于应首先分割值,因此请在顶部添加one.two.three.four
任务,并按以下格式进行配置:
结果:
第3步:
根据您想要的方案成功将其拆分后,该值也应可用于下一个任务。
只需在Powershell
文件中添加另一个脚本,即可设置变量,该变量将我们想要的值存储为输出变量。
然后在split.ps1
任务中配置引用名称。
现在,所有接下来的任务都可以使用Powershell
来调用该值。
答案 1 :(得分:1)
这似乎不可能,所以我使用了一种解决方法。
我在以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_NAME.json"
$SourcePath = "$env:CONFIG_SOURCEDIRECTORY\$SourceFile"
$DestinationPath = "$env:CONFIG_DESTINATIONDIRECTORY\config.json"
Write-Host "Verifying that config file $SourceFile exists"
$FileExists = Test-Path -Path $SourcePath -PathType leaf
if (!$FileExists) {
throw "Config file does not exist at $SourcePath, cannot continue."
}
Write-Host "Copying config file"
Copy-Item "$SourcePath" -Destination "$DestinationPath"
这是特定于流水线的步骤的结束,其余只是我在实际项目中如何使用它的其他信息。
正在构建的项目是用.NET Core编写的,因此我使用了Microsoft.Extensions.Configuration.Json。配置文件示例为:
{
"someKey": "someValue",
"anotherKey": 4,
"yetAnotherKey": true
}
您可以像这样获取配置数据:
var configuration = new ConfigurationBuilder()
.AddJsonFile("config.json", false) // false means the file is not optional
.Build();
在上面,configuration
的类型为IConfigurationRoot
。
您可以直接使用此配置对象:
var someVal = configuration["someKey"];
或者,如果您将密钥放在父密钥中,则可以为配置创建一个强类型的类:
{
"myConfig": {
"someKey": "someValue",
"anotherKey": 4,
"yetAnotherKey": true
}
}
C#类将如下所示:
public class TestConfiguration
{
public string SomeKey { get; set; }
public int AnotherKey { get; set; }
public bool YetAnotherKey { get; set; }
}
实例化并使用这样的类:
var testConfig = configuration.GetSection("myConfig").Get<TestConfiguration>();
var someVal = testConfig.SomeKey;