6

我们使用 Jenkins CI,最近一直在尝试使用 GitVersion 自动生成 SemVer 版本号。但是,当将 GitVersion 与 Multibranch Pipeline 作业(自动为给定的 Git 存储库构建分支和 PR)结合使用时,我们遇到了 GitVersion 的限制,即只有一个远程(由其NormalizeGitDirectory函数强制执行)。我们遇到的具体错误是:

System.ComponentModel.WarningException:已检测到 2 个遥控器。在构建服务器上运行时,Git 存储库应承载一个(且不超过一个)远程。

我们找到的唯一解决方案(如此处的博客)是在SCM 签出之后,在任何会调用 GitVersion 的构建步骤之前手动删除“origin1”远程,如下所示:

bat 'git remote remove origin1'

这行得通,但感觉很像 hack,并且可能不适用于任何分叉来源的 PR。

那里有更好的解决方案吗?

4

1 回答 1

1

似乎使用拉取请求需要两个遥控器来跟踪两者的构建结果(至少当上游遥控器被删除时我没有在 PR 上获得结果)

使用当前的 4.0.13 测试版(和 .12 测试版)我尝试通过直接拉取来解决它,但是直接使用时存在一个影响当前版本计算的错误(https://github.com/GitTools/GitVersion/issues/第1390章

我目前的解决方法是在之前删除上游远程:

def remotes = bat(script: "@call git remote show", returnStdout: true).trim().readLines()
def hasUpstream = remotes.any { it == "upstream" }
def upstreamURL
if (hasUpstream) {
    echo "Remote 'upstream' detected -- ${env.BRANCH_NAME} is pull request, removing remote for further processing"
    upstreamURL = bat(script: "@call git remote get-url upstream", returnStdout: true).trim()
    bat "git remote remove upstream"
}

然后执行:

def command = "@call ${BuildInfo.GitVersion.Run} /updateassemblyinfo /ensureassemblyinfo /nofetch /verbosity debug"
def output = bat(script: command, returnStdout: true).trim()

并在之后添加回来:

if (hasUpstream) {
    echo "Restoring 'upstream' remote using url: ${upstreamURL}"
    bat "git remote add -t master --tags upstream ${upstreamURL}"
}
于 2018-03-26T11:02:32.270 回答