jenkins管道从scm的管道脚本下获取存储库url变量

时间:2017-08-29 10:56:41

标签: jenkins jenkins-pipeline

我正在使用位于我的git存储库中的Jenkins文件。 我已经使用scm中指向我的jenkinsfile的管道脚本配置了新作业。我试图在我的Jenkins文件管道脚本中使用git模块,以便在没有配置预静态变量的情况下从我的git repo中提取数据,并且只使用已经存在的scm的管道脚本下的存储库URL的变量在我的工作中配置。 有一种方法可以以某种方式获得变量存储库URL 来自此插件,而不使用我的Jenkins管道脚本中的参数。

我已经尝试过环境变量 GIT_URL 以及其他与here的git相关的内容,但这并没有用。

pipeline script from scm

4 个答案:

答案 0 :(得分:6)

如果您使用git,可以在.attr("xlink:href", function(d){ return d.img; )}; 变量中找到有关scm的所有信息(GitSCM的实例)。 您可以通过这种方式获取存储库URL

scm

但是如果您只想检查该存储库,则只需调用def repositoryUrl = scm.userRemoteConfigs[0].url 而无需指定其他任何内容。见checkout step

答案 1 :(得分:2)

从这个post我找到了一种方法,你可以使用 checkout scm 来获取这样的git repo url:

checkout scm
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim()

checkout scm 会提取代码,我想避免这样做。

所以我找到了另一种方式(不是漂亮的方式):

node('master'){

  try{
        GIT_REPO_URL = null
        command = "grep -oP '(?<=url>)[^<]+' /var/lib/jenkins/jobs/${JOB_NAME}/config.xml"
        GIT_REPO_URL = sh(returnStdout: true, script: command).trim();
        echo "Detected Git Repo URL: ${GIT_REPO_URL}"  
    }
    catch(err){
        throw err
        error "Colud not find any Git repository for the job ${JOB_NAME}"
  }

}

这对我有用。

答案 2 :(得分:0)

在使用git时,可能不是直接针对您的特定情况的解决方案。

但是对于仍然使用SubversionSCM使用SVN的用户,可以使用

获取存储库URL。
def repositoryUrl = scm.locations[0].remote

答案 3 :(得分:0)

我相信最好的解决方案是 this 答案。 使用声明式管道的示例:

pipeline {
  agent any;
  stages  {
    stage('test'){
      steps {
        script {
          def s = checkout scm;
          if      (s.GIT_URL != null) print s.GIT_URL
          else if (s.SVN_URL != null) print s.SVN_URL
          else print s
        }
      }
    }
  }
}

注意 - 这会进行完整的结帐。如果这是不可取的,我会尝试在结帐参数 (like here)

中处理它