Azure DevOps CI 管道 - 如何动态签出分支?
Azure DevOps CI Pipeline - How to dynamically checkout branches?
设置:
我有一个数据库存储库和一个测试数据库存储库的单元测试存储库,它们在 Azure DevOps 中共享一个项目。我有一个 CI 管道驻留在数据库项目中,该管道在推送到远程跟踪分支时触发。当该目录中的任何分支被推送到时,触发器将 运行 CI。
问题:
我还需要检查单元测试项目,以便我可以调用它。在我们创建任务等之前,我们不知道主题分支会有什么名称,这如何动态捕获?
因此,在 CI 支持下,工程师可以在多个分支上工作,而不必担心在紧急情况下进行整理。
我试过了:
trigger:
- dev/a/*
steps:
- checkout: git://proj/repo-a@dev/a/*
- checkout: git://proj/repo-b@dev/a/*
只是想看看是否有可能并排获得项目。
引发错误:
The pipeline is not valid. Could not get the latest source version for
repository repo-a hosted on Azure Repos using ref
refs/heads/dev/a/. Could not get the latest source version for
repository repo-b hosted on Azure Repos using ref
refs/heads/dev/a/.
我也尝试了上面没有通配符的方法,没有快乐。另一点是我不想检查所有分支,只检查推送的分支。
这当然是可能的...
要动态签出分支,您可以使用预定义变量:Build.SourceBranchName
。
例如:
- checkout: git://proj/repo-a@$(Build.SourceBranchName)
由于你引用了两个repo,你还需要添加一个If表达式来判断哪个repo触发构建,并使用目标repo分支名称。
您可以使用变量:Build.Repository.Name
这是一个例子:
steps:
- ${{ if eq(variables['BUILD.REPOSITORY.NAME'], 'repo-a') }}:
- checkout: git://proj/repo-a@$(Build.SourceBranchName)
- ${{ if eq(variables['BUILD.REPOSITORY.NAME'], 'repo-b') }}:
- checkout: git://proj/repo-b@$(Build.SourceBranchName)
或者你可以使用条件。
例如:
- checkout: git://proj/repo-a@$(Build.SourceBranchName)
condition: eq(variables['BUILD.REPOSITORY.NAME'], 'repo-a')
- checkout: git://proj/repo-b@$(Build.SourceBranchName)
condition: eq(variables['BUILD.REPOSITORY.NAME'], 'repo-b')
这是关于 expression and condition 的文档。
设置:
我有一个数据库存储库和一个测试数据库存储库的单元测试存储库,它们在 Azure DevOps 中共享一个项目。我有一个 CI 管道驻留在数据库项目中,该管道在推送到远程跟踪分支时触发。当该目录中的任何分支被推送到时,触发器将 运行 CI。
问题:
我还需要检查单元测试项目,以便我可以调用它。在我们创建任务等之前,我们不知道主题分支会有什么名称,这如何动态捕获?
因此,在 CI 支持下,工程师可以在多个分支上工作,而不必担心在紧急情况下进行整理。
我试过了:
trigger:
- dev/a/*
steps:
- checkout: git://proj/repo-a@dev/a/*
- checkout: git://proj/repo-b@dev/a/*
只是想看看是否有可能并排获得项目。
引发错误:
The pipeline is not valid. Could not get the latest source version for repository repo-a hosted on Azure Repos using ref refs/heads/dev/a/. Could not get the latest source version for repository repo-b hosted on Azure Repos using ref refs/heads/dev/a/.
我也尝试了上面没有通配符的方法,没有快乐。另一点是我不想检查所有分支,只检查推送的分支。
这当然是可能的...
要动态签出分支,您可以使用预定义变量:Build.SourceBranchName
。
例如:
- checkout: git://proj/repo-a@$(Build.SourceBranchName)
由于你引用了两个repo,你还需要添加一个If表达式来判断哪个repo触发构建,并使用目标repo分支名称。
您可以使用变量:Build.Repository.Name
这是一个例子:
steps:
- ${{ if eq(variables['BUILD.REPOSITORY.NAME'], 'repo-a') }}:
- checkout: git://proj/repo-a@$(Build.SourceBranchName)
- ${{ if eq(variables['BUILD.REPOSITORY.NAME'], 'repo-b') }}:
- checkout: git://proj/repo-b@$(Build.SourceBranchName)
或者你可以使用条件。
例如:
- checkout: git://proj/repo-a@$(Build.SourceBranchName)
condition: eq(variables['BUILD.REPOSITORY.NAME'], 'repo-a')
- checkout: git://proj/repo-b@$(Build.SourceBranchName)
condition: eq(variables['BUILD.REPOSITORY.NAME'], 'repo-b')
这是关于 expression and condition 的文档。