gpt4 book ai didi

Jenkins 多分支管道作业中的 GitVersion

转载 作者:太空狗 更新时间:2023-10-29 13:26:14 24 4
gpt4 key购买 nike

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

System.ComponentModel.WarningException: 2 remote(s) have been detected. When being run on a build server, the Git repository is expected to bear one (and no more than one) remote.

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

bat 'git remote remove origin1'

这可行,但感觉非常像 hack,并且可能不适用于任何 fork-sourced PRs。

有更好的解决方案吗?

最佳答案

似乎通过 pull 请求需要两个远程来跟踪两者的构建结果(至少当上游远程被删除时我没有在 PR 上取回结果)

使用当前的 4.0.13 beta(和 .12 beta)我试图通过直接 pull 来解决它,但是直接使用时存在影响当前版本计算的错误(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}"
}

关于Jenkins 多分支管道作业中的 GitVersion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39475135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com