首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取Jenkins Pipeline或Multibranch Pipeline内的SCM URL?

如何获取Jenkins Pipeline或Multibranch Pipeline内的SCM URL?
EN

Stack Overflow用户
提问于 2016-07-08 04:46:13
回答 2查看 32.8K关注 0票数 25

我正在尝试让一个预构建合并在一个多分支管道中工作,我希望避免在我的管道脚本中硬编码git url。

似乎scm step必须以某种方式存储url,但我不知道如何访问它。

EN

回答 2

Stack Overflow用户

发布于 2016-07-08 05:13:18

您是对的,scm对象确实包含您需要的信息。

当在管道项目(或多分支管道项目)中使用git作为源代码控制时,scm全局变量将是GitSCM的一个实例。这意味着`scm.getUserRemoteConfigs()‘将返回一个UserRemoteConfig实例列表。这些实例包含git remote的名称、url和refspec。您可以遍历该列表以找到匹配的遥控器,或者如果您确定只有一个url,则只使用第一个遥控器。

代码语言:javascript
复制
def scmUrl = scm.getUserRemoteConfigs()[0].getUrl()

备注

  • RejectedAccessException -在"Manage Jenkins -> In-process Script Approval“下,Jenkins和getUrl方法都将抛出org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException,直到您手动批准它们为止。我找到的唯一方法是尝试运行脚本,让它抛出一个访问异常,批准导致异常的一个方法,然后对每个方法重复,直到不再抛出访问异常。幸运的是,该设置是服务器范围的,因此您只需为每个jenkins控制器执行一次此操作,而不是为每个管道作业执行此操作。
  • GitHub -在使用GitHub来源的多分支管道进行测试时,getUserRemoteConfigs返回了两个UserRemoteConfig实例,一个用于常规分支,另一个用于pull请求。它们都有相同的url,所以没什么大不了的,但一定要记住。例如,在使用基于HTTPS的连接的项目中:

echo https://github.com/bitwiseman/project.git ()“+refs/ https://github.com/bitwiseman/project.git /*:refs/remotes/scm.getUserRemoteConfigs/*:refs/remotes/ => /*/head:refs/remotes/ => /pr/*=>echo (origin) "

票数 34
EN

Stack Overflow用户

发布于 2017-01-13 02:32:44

受@BitwiseMan回复的评论的启发,我找到了一种不使用RejectedAccessException获取网址的(黑客)方法:

代码语言:javascript
复制
checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()

请注意,它必须在checkout scm之后完成。基本上,你必须在一个签出的git库中(即里面有.git/config文件)

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38254968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档