如何在VSTS发布过程中获取上一次提交哈希值?
嘿,我刚好对这个场景有经验,给你几个可行的方案来获取目标环境上一次发布的提交哈希,以及列出部署弹窗里的提交记录:
方法一:借助CI/CD平台的内置能力或API查询
不同的CI/CD工具都有对应的方式获取历史部署的提交信息,举几个主流平台的例子:
- GitHub Actions:可以调用GitHub的REST API查询目标环境的最新部署记录,接口格式是
GET /repos/{owner}/{repo}/deployments,指定environment参数过滤后,取返回结果的第一条,里面的sha字段就是上一次发布的提交哈希。如果用Vercel、Netlify这类托管部署工具,它们也提供了内置API来查询部署历史,能直接拿到上一次的提交信息。 - GitLab CI:可以通过GitLab的API
GET /projects/{project_id}/deployments获取环境的部署历史,最新一条的sha就是目标哈希。另外,构建阶段的CI_COMMIT_SHA变量可以直接写入工件元数据,部署时从历史工件里读取也很方便。 - Azure DevOps:调用
GET https://dev.azure.com/{organization}/{project}/_apis/release/releases?definitionId={definitionId}&environmentName={environmentName}&$top=1接口,返回结果里的artifacts[0].version通常包含提交哈希。
方法二:通过构建工件的元数据留存
正如你推测的路径,我们可以在构建阶段就把提交哈希写入一个元数据文件(比如deploy-info.json),和业务工件一起上传存储。部署时,先从目标环境的上一次部署工件中读取这个文件,就能直接拿到上一次的提交哈希。
- 很多平台支持工件附带元数据,比如GitLab的
artifacts:reports功能,可以专门存储这类部署相关的信息,部署阶段直接调取即可。 - 如果是自定义部署脚本,也可以把这个元数据文件存在目标环境的持久化存储(比如服务器的特定目录、配置中心),每次部署成功后更新,下次部署直接读取。
方法三:获取部署弹窗里的提交记录列表
要拿到两次发布之间的所有提交(就是部署弹窗里显示的那些),可以用Git命令直接对比两次提交的差异:
git log --oneline <上一次提交哈希>..<当前提交哈希>
这条命令会以简洁格式列出两次提交之间的所有记录,和你在部署弹窗里看到的内容一致。如果是云原生部署场景,有些工具会把发布历史存在K8s的ConfigMap或Secret里,用kubectl get命令也能读取到这些提交信息。
小提醒
如果是自定义部署流程,最好把上一次的提交哈希做持久化存储(比如数据库、环境变量),每次部署成功后更新这个值,这样下次部署时能直接读取,不用每次调用API查询,效率更高。
内容的提问来源于stack exchange,提问作者Richard Szalay
相关产品推荐
相关产品推荐

