我们正在试验AzureDevOps。我们使用git multirepo,不幸的是,不同的仓库之间存在直接的依赖关系。使用以前的工具,我们曾经使用名称匹配来自不同存储库的分支,并将其名称回退到master-如果某个回购中不存在分支XXX,而使用master的话。
我想使用AzureDevOps YAML语法实现相同的行为。这是我的尝试。
resources:
repositories:
- repository: repo
type: GitHub
connection: myGitHubConnection
source: primaryRepo
ref: $(Build.SourceBranchName)
- repository: repo
type: GitHub
connection: myGitHubConnection
source: secondaryRepo
ref: $(Build.SourceBranchName)
它有一个问题-如果$(Build.SourceBranchName)
上不存在secondaryRepo
,则管道失败并显示以下消息:
管道无效。无法获取使用ref refs / heads / $(Build.SourceBranchName)在GitHub上托管的存储库公司/ secondaryRepo的最新源版本...
替换特定分支名称的地方(可变作品)。
在ref
无效(分支不存在)的情况下是否可以指定回退?我尝试执行重复的ref
并在YAML中使用列表,但没有成功。
答案 0 :(得分:1)
首先,我们不支持在ref
中使用动态变量。截至今天,用户必须在此处提供一个fixed value。
这就是为什么您收到诸如using ref refs/heads/$(Build.SourceBranchName)
之类的消息的原因。您可以直接看到在解析期间未成功编译实际的分支名称。
此外,我们的系统只能一次解析存储库。
这意味着一旦系统解析了作业之后,系统发现一个分支不存在(通常,该作业在initial
步骤中完成,而该步骤在运行时之前完成了),我们的系统将无法一个自动重新编译的过程,即退回到master
分支。
我们已将此suggestion考虑在内,一旦它实际扩展,它可能有助于实现您想要的目标,因为我们可以在此处创建表达式条件和变量。您可以在此处投票和评论,以提高其优先级。
如果ref无效,是否有一种方法可以指定回退(分支确实 不存在)?
条件表达式和变量不允许在此处应用,也许它们可以以API或脚本的形式实现?
恐怕但必须说,不,直到现在都不可能实现。
根据您的经验,一旦我们的系统发现分支不存在,整个管道将失败。如果管道未运行,则API /脚本将没有任何机会执行操作(后退)。