我们使用Jenkins CI并且最近一直在尝试使用GitVersion来自动生成SemVer版本号。但是,当将GitVersion与Multibranch Pipeline作业(自动为给定的Git存储库自动构建分支和PR)相结合时,我们已经遇到GitVersion仅限于一个远程的限制(由NormalizeGitDirectory强制执行功能)。我们遇到的具体错误是:
System.ComponentModel.WarningException:已经有2个遥控器 检测。在构建服务器上运行时,Git存储库是 预计将承担一个(并且不超过一个)远程。
我们找到的唯一解决方案(如博客here)是手动删除" origin1" SCM结账后远程,在任何可以调用GitVersion的构建步骤之前,如下所示:
bat 'git remote remove origin1'
这有效,但感觉非常像黑客,并且可能不适用于任何来自源代码的PR。
那里有更好的解决方案吗?
答案 0 :(得分: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}"
}