我正在尝试让一个预构建合并在一个多分支管道中工作,我希望避免在我的管道脚本中硬编码git url。
似乎scm step必须以某种方式存储url,但我不知道如何访问它。
发布于 2016-07-08 05:13:18
您是对的,scm对象确实包含您需要的信息。
当在管道项目(或多分支管道项目)中使用git作为源代码控制时,scm全局变量将是GitSCM的一个实例。这意味着`scm.getUserRemoteConfigs()‘将返回一个UserRemoteConfig实例列表。这些实例包含git remote的名称、url和refspec。您可以遍历该列表以找到匹配的遥控器,或者如果您确定只有一个url,则只使用第一个遥控器。
def scmUrl = scm.getUserRemoteConfigs()[0].getUrl()备注
getUrl方法都将抛出org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException,直到您手动批准它们为止。我找到的唯一方法是尝试运行脚本,让它抛出一个访问异常,批准导致异常的一个方法,然后对每个方法重复,直到不再抛出访问异常。幸运的是,该设置是服务器范围的,因此您只需为每个jenkins控制器执行一次此操作,而不是为每个管道作业执行此操作。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) "
发布于 2017-01-13 02:32:44
受@BitwiseMan回复的评论的启发,我找到了一种不使用RejectedAccessException获取网址的(黑客)方法:
checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()请注意,它必须在checkout scm之后完成。基本上,你必须在一个签出的git库中(即里面有.git/config文件)
https://stackoverflow.com/questions/38254968
复制相似问题