在Azure DevOps中,是否有创建指向最新构建成果的永久链接的方法?

3
当我推送或合并更改到主分支时,我设置了ADO构建我的解决方案,并生成一个构件,但是每次构建的构件路径都会更改。是否有办法创建一个永久链接,始终指向最新的构建构件,以便我可以与其他人分享它,而不必让他们通过构建列表中的一堆链接或每次有新的构建就给他们一个新链接?
为了澄清:假设我有构建1,URL为http://azure.com/build/1/artifact或类似的内容。现在我推送了一些更改,我得到了构建2,URL为http://azure.com/build/2/artifact。因此,我必须更新我所有链接到构建1的地方,以便链接到构建2来共享应用程序。我正在寻找某种http://azure.com/build/latest/artifact永久链接,始终指向最新的构建。

只是想确认所提供的信息是否有帮助。如果您需要进一步的帮助,请告诉我们。 - Leo Liu
好吧,听起来不像我希望的那么容易!我想知道是否有一种使用JavaScript获取最新构建的方法,这样我就可以将脚本附加到超链接上,并让它执行所有必要的逻辑以查找和下载构建...那将是非常好的! - ekolis
抱歉,我不熟悉JavaScript,所以无法直接给您提供解决方案的答案。但是解决方案是正确的,尽管看起来并不简单。因为您需要永久链接到最新构建工件,然后您可以更新您的问题,这需要使用JavaScript来实现您的请求。 - Leo Liu
是的,我认为对于初学者来说,将永久链接到最新的构建工件应该足够好;我可以提供关于从那里下载二进制文件的链接点击说明...我如何创建到最新工件的永久链接? - ekolis
1
我在我的回答中提供了它,但它使用的是PowerShell脚本而不是JavaScript,如果你想要使用JavaScript,你可能需要自己转换它。 - Leo Liu
2个回答

1

嗯,所以我必须调用一个API才能获取最新工件的URL?我尝试了这个链接:https://dev.azure.com/edkolis/FrEee/_apis/build/latest/ekolis.FrEee/?api-version=5.1-preview.1 但是我收到了一个错误 {"$id":"1","innerException":null,"message":"Folder -1 was not found.","typeName":"Microsoft.TeamFoundation.Build.WebApi.FolderNotFoundException, Microsoft.TeamFoundation.Build2.WebApi","typeKey":"FolderNotFoundException","errorCode":0,"eventId":3000} - ekolis
哦,等一下,我在那个URL中多加了一个斜杠。应该是这个:https://dev.azure.com/edkolis/FrEee/_apis/build/latest/ekolis.FrEee?api-version=5.1-preview.1 - 这会给我一些JSON,我猜我需要解析它... - ekolis
1
是的,没有直接获取最新构件的方式。你需要构建 ID。另一种方法是将构件上传到 Nexus 或 Docker Registry,并通过它们获取最新版本。 - user4433284

1
在Azure DevOps中,有没有创建到最新构建工件的永久链接的方法?
恐怕没有直接的方法可以创建到最新构建工件的永久链接。
这是因为最新构建工件的链接与构建ID相关,例如:
https://dev.azure.com/<OrganizationName>/<ProjectID>/_apis/build/builds/2037/artifacts?artifactName=Test&api-version=5.0&%24format=zip

因此,最新构建工件的链接根据每个构建 ID 不同。

作为解决方法,我们可以使用 REST API Latest - Get 获取定义的最新构建:

GET https://dev.azure.com/{organization}/{project}/_apis/build/latest/{definition}?api-version=5.1-preview.1

调用上述API的PowerShell脚本:

$url = "https://dev.azure.com/{organization}/{project}/_apis/build/latest/51?&api-version=5.0-preview.1"
$buildPipeline= Invoke-RestMethod -Uri $url -Headers @{   
 Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get

$BuildId= $buildPipeline.id

Write-Host This is start time: $BuildId

那么我们就可以获取最新版本的定义构建:

enter image description here

接下来,我们需要将这个最新的构建 ID 传输到下一个 REST API Artifacts - Get Artifact 中:

Write-Host ("##vso[task.setvariable variable=LatestBuildId]$BuildId")

GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts?artifactName={artifactName}&api-version=5.1

这是 PowerShell 脚本:

$url = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$(LatestBuildId)/artifacts?artifactName=test&api-version=5.0"
$buildPipeline= Invoke-RestMethod -Uri $url -Headers @{   
 Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
} -Method Get

$ArtifactDownloadURL= $buildPipeline.resource.downloadUrl


Write-Host This is start time: $ArtifactDownloadURL

结果是:

这里放内容

enter image description here

现在,我们可以获取到最新构建物品的链接。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接