Azure DevOps是否为其构建提供持久存储?

时间:2019-10-03 14:03:56

标签: azure-devops azure-devops-rest-api

我想开发一个Azure DevOps构建,该构建需要读取一些数据,并在构建后更新该数据。我目前的选择是:

  1. 将数据与构建作为工件相关联。下一个版本将知道查看该工件的前一个版本,从而获得所需的数据。依赖于前一个版本的存在,即是否有人意外删除它-poof。另外,如果有人修改保留政策-poof。
  2. 将数据作为文件存储在Git存储库中,可以是包含构建文件的文件,也可以是专用文件。-构建文件必须将更改推送到存储库。如果是专用的回购协议,则还必须手动获取数据。
  3. 某个地方的专用存储空间。

我并不特别热衷于破解项目(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
}

0 个答案:

没有答案