问题
我们希望能够从不同的功能分支构建代码并将其部署到各种环境,而不必在每次拥有功能分支时克隆和修改构建和发布管道。使用 TFVC 源代码管理时,Azure Pipelines 是否支持构建多个分支并在管道中执行基于分支的条件任务?如果是的话,怎么办?
背景
在本地运行 Azure DevOps Server 2020 Update 1。我们的代码存储库中有多个应用程序,每个应用程序都有自己的开发、主要和功能分支,使用 TFVC 作为源控制存储库。 源代码控制存储库结构如下:
Team Project
/Apps
/App 1
/dev branch
/dev-feature-1 branch
/dev-feature-2 branch
/ main branch
/App 2
/dev branch
/dev-feature-1 branch
/dev-feature-2 branch
/ main branch
/Utilities
/SomeCommonStuff
我们有经典的(不是 YAML)构建管道,可以为我们的每个开发分支和主分支构建、执行门控签入和发布工件。 然后,我们有发布管道,从这些构建中获取工件并将它们部署到我们的不同环境(开发、QA、生产)
迄今为止对问题所做的研究
根据此文档:Azure Pipelines 似乎支持使用 Git 作为源代码控制存储库在一个构建管道中构建多个分支,因为您可以指定执行某些任务,例如使用支持的条件仅在某些分支中构建某些解决方案文件Build.SourceBranch 变量(如此处所述)。
但是,当使用 TFVC 作为源并尝试进行构建时,它不会将 Build.SourceBranch 变量设置为分支名称(即:在我们的例子中为 dev、dev-feature-1、main 等),但只是将其设置为团队项目的根目录(即在我们的例子中:$/Team Project),因此我们无法根据正在构建的分支执行条件逻辑来执行某些任务,这使得我们不能使用一个构建定义构建多个分支,并且可能让我们只能为每个功能分支创建一个新的构建和发布管道(这将是乏味的)。
有一些解决方法,但在我们探索这些方法之前,我必须强烈敦促您和您的团队考虑迁移到 Git。 TFVC 显然已经走到了生命周期的尽头。 TFVC 是一条死胡同。
至于解决方法:
$(Build.SourceDirectory)
变量来查找它们需要的文件,那么整个管道可以轻松地从一个分支移植到另一个分支。
但是无论您选择哪种解决方法,请开始计划向 Git 的迁移。