Azure Pipelines多仓库如何获取Git提交ID

7
对于多存储库的Azure Pipeline,如何从已检出的资源存储库获取GIT提交ID?是否支持?
我正在使用Azure repo存储管道yaml文件,并在代理上检查构建源以进行构建。由于我们使用Delphi,因此必须使用代理。
resources:
  repositories:
  - repository: MyBitBucketRepo
    type: bitbucket
    endpoint: MyBitBucketServiceConnection
    name: MyBitBucketOrgOrUser/MyBitBucketRepo

trigger:
- pilot

pool:
  name: MyAgent
  demands: RADSTUDIO

variables:
  GIT_COMMIT: $(Build.SourceVersion) # <- How can I get the checked out Commit ID for the MyBitBucketRepo?
  GIT_BRANCH: $(Build.SourceBranchName) # And the branch name?

steps:
- checkout: MyBitBucketRepo

- script: dir $(Build.SourcesDirectory)
- script: echo $(GIT_COMMIT)
- script: echo $(GIT_BRANCH)
# todo set environment vars on agent with the Commit and Branch names required by msbuild script on agent
# todo run msbuild script on agent

在 https://learn.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops 的“存储库详细信息”中建议您可以从变量中获取信息,但示例中唯一“记录”的变量是 .ref,不知道哈希值是否也在其中。 - bluemind
3个回答

6

如何从检出的资源库中获取GIT提交ID?是否支持?

很遗憾,Azure DevOps目前不支持此功能。

因此,我们不能直接使用预定义变量如$(Build.SourceVersion)来直接从多个仓库中获取Git提交ID。

要解决这个问题,我们可以使用git命令行来获取提交ID和分支名称:

 git rev-parse HEAD
 git branch -r

你可以查看我的测试YAML文件以了解一些细节:
resources:
  repositories:
  - repository: TestProject
    type: github
    name: xxxx/TestProject
    endpoint: GitHub connection 1
  - repository: leotest
    type: bitbucket
    name: Lsgqazwsx/leotest
    endpoint: Lsgqazwsx

variables:
  GIT_COMMIT: $(Build.SourceVersion)
  GIT_BRANCH: $(Build.SourceBranchName)


stages:
- stage:
  jobs:
   - job: A
     pool:
       name: MyPrivateAgent
     steps:
     - checkout: TestProject
     - script: echo $(GIT_COMMIT)

- stage:
  jobs:
   - job: B
     pool:
      name: MyPrivateAgent
     steps:
     - checkout: leotest
     - script: git rev-parse HEAD
     - script: git branch -r

工作B的结果:

enter image description here

来自 bitbucket.org 的提交 ID:

enter image description here

希望这可以帮到你。

谢谢,这回答了是否支持的问题。Git branch -r 列出分支,git branch --show-current 应该给出分支名称,但是 head 是分离的。此外,通过管道设置代理机器环境变量似乎不起作用。代理已设置为具有权限设置机器环境变量的用户,在代理机器上的 powershell windows 中工作。msbuild 文件没有捕获刚刚设置的机器环境变量(即使它是一个单独的脚本步骤),所以必须进行调试。希望 Delphi 能够得到支持。 - jan2705170

1
您可以从存储库资源中访问提交。这里是所有支持的变量和资源.repositories的示例。
特别是您要查找resources.repositories..version属性以获取提交ID,以及resources.repositories..ref用于分支名称。
以下是如何在您的情况下检索它们:
resources:
  repositories:
  - repository: MyBitBucketRepo
    type: bitbucket
    endpoint: MyBitBucketServiceConnection
    name: MyBitBucketOrgOrUser/MyBitBucketRepo

variables:
  GIT_COMMIT: $[ resources.repositories.MyBitBucketRepo.version ]
  GIT_BRANCH: $[ resources.repositories.MyBitBucketRepo.ref ]

steps:
- script: echo $(GIT_COMMIT)
- script: echo $(GIT_BRANCH)

-1

本文建议您可以使用变量:resources.pipeline.MyBitBucketRepo.sourceCommit


这是针对管道资源定义的,而不是仓库资源,而且你将获得的sourceCommit将是指定管道所在的仓库的提交。文档记录不完善。 - undefined

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