我们使用jenkins ci,最近一直在试验gitfersion来自动生成semver版本号。然而,当将gitversion与多分支管道作业(为给定的git存储库自动构建分支和prs)组合时,我们遇到了gitversion只有一个远程作业的限制(由其NormalizeGitDirectory函数强制执行)。我们遇到的具体错误是:
system.componentmodel.warningexception:2个远程
检测。在构建服务器上运行时,git存储库是
预计将携带一个(且不超过一个)遥控器。
我们找到的唯一解决方案(如bloggedhere)是在scm签出之后,在调用gitversion的任何构建步骤之前,手动删除“origin1”远程,如下所示:
bat 'git remote remove origin1'
这是可行的,但感觉非常像一个黑客,并可能不会与任何叉子来源的减贫战略工作。
有更好的解决办法吗?
最佳答案
似乎在pull请求中,需要两个remote来跟踪两个remote的构建结果(至少在移除upstream remote时,我没有在pr上获取结果)
使用当前的4.0.13 beta(和.12 beta)我试图通过直接拉来解决这个问题,但是当直接使用时,有一个bug会影响当前版本的计算(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}"
}