GitVersion在Jenkins Multibranch Pipeline工作中

Nic*_*nes 5 git jenkins gitversion

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

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

我们已经找到了唯一的解决方案(如博客这里)是手动删除"origin1"单片机结账后,遥控器,前,将调用GitVersion,像这样任何构建步骤:

bat 'git remote remove origin1'
Run Code Online (Sandbox Code Playgroud)

这有效,但感觉非常像黑客,并且可能不适用于任何来自源代码的PR.

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

Jak*_*ski 1

看来,通过拉取请求,需要两个遥控器来跟踪两者的构建结果(至少当上游遥控器被删除时,我没有在 PR 上得到结果)

使用当前的4.0.13 beta(和.12 beta)我尝试通过直接拉取来解决它,但是直接使用时存在一个影响当前版本计算的错误(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"
}
Run Code Online (Sandbox Code Playgroud)

然后执行:

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

并在之后添加回来:

if (hasUpstream) {
    echo "Restoring 'upstream' remote using url: ${upstreamURL}"
    bat "git remote add -t master --tags upstream ${upstreamURL}"
}
Run Code Online (Sandbox Code Playgroud)