gpt4 book ai didi

git - 在 VSTS 中使用 VSTS API 的持续集成/持续交付过程中将文件提交到 Git

转载 作者:太空狗 更新时间:2023-10-29 14:42:39 28 4
gpt4 key购买 nike

我们在 VSTS 中配置了多个使用不同数据库的发布环境。这些环境中的每个数据库都包含控制应用程序工作方式的特定元数据。此元数据由管理工具定期配置给用户。

我们希望备份此元数据并在每次发布时将其 checkin Git,以便我们将其保存在某个地方,以防数据丢失或需要比较以前的版本。我们有一个实用程序可以从生成 XML 文件的数据库中提取此元数据,因此我将运行此实用程序,然后使用 VSTS 中的任务以某种方式将其放入 Git 中。如果可能的话,我们还计划将我们的 VSTS 发布定义导出到 JSON 中,并将其也检查到 Git 中。

如何在发布定义阶段将文件 checkin 存储库?

最佳答案

经过一些研究和几个小时后在 Postman/VSTS 中进行测试 - 我能够编写一个 powershell 脚本,该脚本将 API 请求发送到 VSTS 并将文件提交到存储库。

我引用了 Create a push documentation here .我需要确定 JSON 请求的以下属性的正确值:

这是一个检索最新的 objectId 以用作 oldObjectId 值的示例:

Invoke-RestMethod -Uri "https://{accountName}.visualstudio.com/DefaultCollection/{project}/_apis/git/repositories/{repositoryId}/refs?filter=heads%2Fmaster&api-version=4.1-preview" -Method Get -Headers $header

我的下一个任务是准备 newContent 属性。由于我试图上传 XML 文件,rawText 由于所有特殊字符而无法上传。唯一允许的其他内容类型是 base64Encoded

我必须使用 Powershell 的 Get-Content cmdlet 并启用 -Raw 开关才能成功对内容进行 base64 编码。我从另一个StackOverflow post那里了解到的我早些时候在遇到 XML 格式问题时创建了。

$xmlData = Get-Content -Path $xmlFile -Raw
$xmlDataEncoded = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($xmlData))

然后,为了确定我是在添加新文件还是修改现有文件,我需要向脚本添加逻辑以检查文件是否存在并将 changeType 设置为 add编辑。见下文:

$xmlDataRepo = Invoke-RestMethod -Uri "{accountName}.visualstudio.com/DefaultCollection/{project/_apis/git/repositories/{project}/items/?recursionLevel=OneLevel&api-version=4.1-preview" -Method Get -Headers $header
ForEach-Object -InputObject $xmlDataRepo.value -Process {if ($_.path -eq $repoXmlFile) {$changeType = "edit"} else {$changeType = "add"}}

最后,现在我已经收集了所有信息并对我的 XML 内容进行了编码。我需要构建请求正文并调用 API。这是请求的正文:

$body = @"
{
"refUpdates": [
{
"name": "refs/heads/master",
"oldObjectId": "$objectId"
}
],
"commits": [
{
"comment": "Data backed up",
"changes": [
{
"changeType": "$changeType",
"item": {
"path": "$repoXmlFile"
},
"newContent": {
"content": "$xmlDataEncoded",
"contentType": "base64Encoded"
}
}
]
}
]
}
"@

最后,最重要的是:

Invoke-RestMethod -Uri "https://{accountName}.visualstudio.com/DefaultCollection/{project/_apis/git/repositories/{project}/pushes?api-version=4.1-preview" -Method Post -Headers $header -Body $body -ContentType application/json

希望对你有帮助

关于git - 在 VSTS 中使用 VSTS API 的持续集成/持续交付过程中将文件提交到 Git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49057808/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com