Git 如何在Jenkins管道或多分支管道中获取SCM URL?
我正在尝试让预构建合并在多分支管道中工作,我希望避免在管道脚本中硬编码git urlGit 如何在Jenkins管道或多分支管道中获取SCM URL?,git,jenkins,branching-and-merging,jenkins-pipeline,Git,Jenkins,Branching And Merging,Jenkins Pipeline,我正在尝试让预构建合并在多分支管道中工作,我希望避免在管道脚本中硬编码git url 似乎scm步骤必须以某种方式存储url,但我不知道如何访问它。您是对的,scm对象确实包含您需要的信息 在管道项目(或多分支管道项目)中将git用作源代码管理时,scm全局变量将是的实例。这意味着'scm.getUserRemoteConfigs()'将返回实例列表。这些实例具有git remote的名称、url和refspec。您可以迭代该列表以查找匹配的远程服务器,或者如果您确定只有一个url,则只使用第一
似乎scm步骤必须以某种方式存储url,但我不知道如何访问它。您是对的,
scm
对象确实包含您需要的信息
在管道项目(或多分支管道项目)中将git用作源代码管理时,scm
全局变量将是的实例。这意味着'scm.getUserRemoteConfigs()'将返回实例列表。这些实例具有git remote的名称、url和refspec。您可以迭代该列表以查找匹配的远程服务器,或者如果您确定只有一个url,则只使用第一个远程服务器
def scmUrl = scm.getUserRemoteConfigs()[0].getUrl()
笔记
- RejectedAccessException-getUserRemoteConfigs和
方法都将抛出getUrl
,直到您在“管理Jenkins->过程中脚本批准”下手动批准它们。我发现的唯一方法是尝试运行脚本,让它抛出一个访问异常,批准导致异常的一个方法,然后对每个方法重复,直到不再抛出访问异常。幸运的是,该设置是服务器范围的,因此每个jenkins控制器只需执行一次,而不是每个管道作业org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException
- GitHub-在使用源于GitHub的多分支管道进行测试时,
返回两个UserRemoteConfig实例,一个用于常规分支,另一个用于请求。它们有相同的url,所以没什么大不了的,但要记住一些东西。例如,在使用基于HTTPS的连接的项目中:getUserRemoteConfigs
echo scm.getUserRemoteConfigs() "[ +refs/heads/*:refs/remotes/origin/* => https://github.com/bitwiseman/project.git (origin), +refs/pull/*/head:refs/remotes/origin/pr/* => https://github.com/bitwiseman/project.git (origin) ]"
checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()
请注意,必须在
签出scm
后执行此操作。基本上,您必须在一个签出的git存储库中(即其中包含.git/config
文件)谢谢,这正是我要找的。您的回答还让我意识到,通过解析.git/config
文件,可以使用url。这有助于避免RejectedAccessException问题,但会增加构建脚本的复杂性。jenkins从哪里获得https URLgit remote-v
按预期输出SSH URL。我很失望像子模块更新这样的琐碎事情需要巨大的解决办法。Multibranch pipeline在黄金时段根本没有做好准备……在我写这篇文章的时候,在我的Jenkins实例中,“批准的签名”所需信息如下:method hudson.plugins.git.GitSCM getUserRemoteConfigs
method hudson.plugins.git.UserRemoteConfig getUrl
如果您像我一样来这里寻找subversion的解决方案,请使用scm.getLocations()[0].getUrl()
。这很有效。在我的例子中,我使用它来避免在maven项目的pom.xml中配置url。我想说,以这种方式自动发现url比在maven项目中维护url要简单得多(如果url是错误的,可能会出现令人困惑的错误)。还可以捕获“checkout scm”的输出,如图所示:如果您使用它,它将在Windows下通过将“sh”替换为“powershell”来工作。