我想开发一个Azure DevOps构建,该构建需要读取一些数据,并在构建后更新该数据。我目前的选择是:
我并不特别热衷于破解项目(1)和(2)。第(3)项似乎是最直接的方法,但随后我必须维护此单独的存储。即使它是Azure中最简单的Blob存储。
有更好的方法吗?
编辑1
通过扫描Azure DevOps REST API文档,我遇到了-https://docs.microsoft.com/en-us/rest/api/azure/devops/build/properties?view=azure-devops-rest-5.1
以前从未使用过它,但它确实符合我的需求。我不需要存储大量数据。想知道是否有人对构建属性有任何经验,那里是否有陷阱。
编辑2
我需要存储的文字信息少于1K。我可以将其存储在共享驱动器上的文件中,但是这会带来很多维护麻烦-需要确保权限正确并且没有人删除此文件。
最后,我决定将信息存储在使用以下powershell代码开发的构建的定义中:
$DefaultStateKey = "3edac6eed15745eb960e20b53e2bba68"
function ExtractValue($res, $StateKey)
{
$res = $res.value.$StateKey.'$value'
if ($res)
{
$res = $res | ConvertFrom-Json
}
$res
}
function Get-State(
[Parameter(Mandatory)]$TfsProject,
[Parameter(Mandatory)]$BuildDefId,
[ValidateNotNullOrEmpty()]$StateKey = $DefaultStateKey)
{
$url = "$TfsInstanceUrl/$TfsProject/_apis/build/definitions/$BuildDefId/properties?$TfsApiVersion-preview.1"
ExtractValue $(Invoke-RestMethod $url -UseDefaultCredentials) $StateKey
}
function Set-State(
[Parameter(Mandatory)]$TfsProject,
[Parameter(Mandatory)]$BuildDefId,
[Parameter(Mandatory)][AllowNull()]$value,
[ValidateNotNullOrEmpty()]$StateKey = $DefaultStateKey)
{
$url = "$TfsInstanceUrl/$TfsProject/_apis/build/definitions/$BuildDefId/properties?$TfsApiVersion-preview.1"
$Body = @{
path = "/$StateKey"
}
if ($null -eq $value)
{
$Body.op = 'Remove'
}
else
{
$Body.op = 'Add'
$Body.value = $value | ConvertTo-Json
}
$Body = $Body | ConvertTo-Json -Compress
ExtractValue $(Invoke-RestMethod $url `
-UseDefaultCredentials `
-Method Patch `
-ContentType "application/json-patch+json" `
-Body "[$Body]") $StateKey
}