是否存在Azure DevOps变量存储上次构建后的Git提交标题列表?
解答
Azure DevOps没有预定义变量可以直接获取上次构建以来的完整提交列表——官方提供的预定义变量(比如Build.SourceVersionMessage)仅能获取单个提交的信息,无法覆盖你需要的提交范围。
如果想避免复杂编码,可参考以下两种可行方案:
方案1:利用Azure DevOps REST API
- 直接使用预定义变量
$(Build.SourceVersion)获取当前构建的提交ID - 调用构建列表API,获取上一次成功完成的构建的提交ID(需排除当前构建):
(注:可通过GET https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds?definitions={流水线ID}&statusFilter=completed&resultFilter=succeeded&$top=1&$orderBy=finishTime desc&minTime={当前构建开始时间}$(Build.StartTime)变量传递当前构建的开始时间,确保返回的是上一次构建) - 调用提交列表API,传入两次构建的提交ID,获取中间的所有提交:
在流水线任务中,可通过PowerShell/Bash直接发起请求,使用GET https://dev.azure.com/{组织名}/{项目名}/_apis/git/repositories/{仓库ID}/commits?searchCriteria.fromCommitId={上一次提交ID}&searchCriteria.toCommitId={当前提交ID}$(System.AccessToken)作为请求头的授权凭证,无需额外配置账号。
方案2:Git命令直接获取
如果你的流水线已经拉取了完整的Git仓库,可通过以下步骤获取提交列表:
- 使用Azure CLI获取上一次成功构建的提交ID(需提前在流水线中安装Azure CLI并完成授权):
PREV_COMMIT=$(az pipelines build list --definition-id $(System.DefinitionId) --status completed --result succeeded --top 1 --query "[0].sourceVersion" -o tsv) - 执行Git命令输出提交列表(可自定义格式,比如
--oneline简化输出):
这种方式无需处理API逻辑,适合快速实现需求。git log --oneline $PREV_COMMIT..$(Build.SourceVersion)
内容的提问来源于stack exchange,提问作者Michael Gaines
相关产品推荐
相关产品推荐

