通过 REST 创建 Azure Devops/Pipeline 版本,包括所有元数据,如 buildNumber
Create Azure Devops/Pipeline release including all meta data like buildNumber via REST
我知道 https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/create?view=azure-devops-rest-6.0#uri-parameters 并且我可以通过 REST 创建版本,但是...
问题:
这些版本的问题是,通过 REST 触发的版本缺少一些预定义变量,例如 Build.BuildNumber
- 或者至少,它们并非在所有范围内都可用。
似乎 Build.BuildNumber
在 pipeline stage
中可用,但在计算 发布名称格式 时丢失了。这意味着,发布名称格式 Release-$(Build.BuildNumber)($(Release.ReleaseId))
在使用下面的有效负载创建时将以空白 Build.BuildNumber
结尾。
详情:
我的 json 负载
{
"definitionId": 9,
"description": "Test Release",
"artifacts": [
{
"alias": "My Build Artifact",
"instanceReference": {
"id": "6989",
"name": null
}
}
],
"isDraft": false,
"reason": "none",
"manualEnvironments": null
}
虽然 artifacts.instanceReference.id
引用了一个有效的版本(当然有一个 buildNumber)- 所以在发布阶段 Build.BuildNumber
被正确填充。
我通过
发送有效载荷
curl -X POST -u username:redactedPAT -H "Content-Type: application/json" -d @payload.json https://vsrm.dev.azure.com/redactedCompany/redactedProjectId/_apis/release/releases\?api-version\=6.0
问题:
创建一个版本的正确方法是什么,就好像它是通过包含所有元数据的 GUI 创建的一样?
我是否想念以某种方式使用 API 或我是否需要手动设置环境变量才能使其工作(或者甚至通过 variables
以某种方式)。
由于 buildNumber
在舞台上可用,那会不会是 rather/even 一个错误?
发布名称是在编译时评估的,这意味着它是在管道任务执行之前填充的。您可以查看以下解决方法来填充版本名称。
1、您在发布名称格式中定义的$(Build.BuildNumber)
变量将检索您传递给artifacts
instanceReference
中的name
属性请求正文。所以可以将BuildNumber值传给请求体中instanceReference
下的name
属性。参见 here。
{
...
"artifacts": [
{
"alias": "My Build Artifact",
"instanceReference": {
"id": "6989",
"name": BuildNumber #set the buildNumber here.
}
}
],
...
}
2,另一种解决方法是使用 logging commands 在脚本任务中更新版本名称。
您可以在发布管道阶段添加脚本任务。并且 运行 下面的日志记录命令在发布管道执行期间更新发布名称。
echo "##vso[release.updatereleasename]Release-$(Build.BuildNumber)($(Release.ReleaseId))"
见下例:
任务执行时。它将使用您想要的格式更新版本名称。
我知道 https://docs.microsoft.com/en-us/rest/api/azure/devops/release/releases/create?view=azure-devops-rest-6.0#uri-parameters 并且我可以通过 REST 创建版本,但是...
问题:
这些版本的问题是,通过 REST 触发的版本缺少一些预定义变量,例如 Build.BuildNumber
- 或者至少,它们并非在所有范围内都可用。
似乎 Build.BuildNumber
在 pipeline stage
中可用,但在计算 发布名称格式 时丢失了。这意味着,发布名称格式 Release-$(Build.BuildNumber)($(Release.ReleaseId))
在使用下面的有效负载创建时将以空白 Build.BuildNumber
结尾。
详情:
我的 json 负载
{
"definitionId": 9,
"description": "Test Release",
"artifacts": [
{
"alias": "My Build Artifact",
"instanceReference": {
"id": "6989",
"name": null
}
}
],
"isDraft": false,
"reason": "none",
"manualEnvironments": null
}
虽然 artifacts.instanceReference.id
引用了一个有效的版本(当然有一个 buildNumber)- 所以在发布阶段 Build.BuildNumber
被正确填充。
我通过
发送有效载荷curl -X POST -u username:redactedPAT -H "Content-Type: application/json" -d @payload.json https://vsrm.dev.azure.com/redactedCompany/redactedProjectId/_apis/release/releases\?api-version\=6.0
问题:
创建一个版本的正确方法是什么,就好像它是通过包含所有元数据的 GUI 创建的一样?
我是否想念以某种方式使用 API 或我是否需要手动设置环境变量才能使其工作(或者甚至通过 variables
以某种方式)。
由于 buildNumber
在舞台上可用,那会不会是 rather/even 一个错误?
发布名称是在编译时评估的,这意味着它是在管道任务执行之前填充的。您可以查看以下解决方法来填充版本名称。
1、您在发布名称格式中定义的$(Build.BuildNumber)
变量将检索您传递给artifacts
instanceReference
中的name
属性请求正文。所以可以将BuildNumber值传给请求体中instanceReference
下的name
属性。参见 here。
{
...
"artifacts": [
{
"alias": "My Build Artifact",
"instanceReference": {
"id": "6989",
"name": BuildNumber #set the buildNumber here.
}
}
],
...
}
2,另一种解决方法是使用 logging commands 在脚本任务中更新版本名称。
您可以在发布管道阶段添加脚本任务。并且 运行 下面的日志记录命令在发布管道执行期间更新发布名称。
echo "##vso[release.updatereleasename]Release-$(Build.BuildNumber)($(Release.ReleaseId))"
见下例:
任务执行时。它将使用您想要的格式更新版本名称。